在mongoengine上无法弄清楚更新

时间:2018-05-09 17:43:33

标签: python-3.x mongodb mongoengine

此代码返回一个我不明白的错误:

query = Analytic.objects(uid__type="binData")
analytics = []
for analytic in query:
    analytic.sessionId = str(analytic.sessionId)
    analytic.uid = str(analytic.uid)
    analytics.append(analytic)
    if len(analytics) % 10000 == 0:
        print(".")
    if len(analytics) == 100000:
        Analytic.objects.update(analytics, upsert=False)
        analytics = []
     

TypeError:update()为参数'upsert'

获取了多个值

2 个答案:

答案 0 :(得分:0)

看起来你已经遍历了查询集的所有对象。

query = Analytic.objects(uid__type="binData")

然后对于满足〜

的循环的每次迭代
if len(analytics) == 100000:
    Analytic.objects.update(analytics, upsert=False)
    analytics = []

您启动另一个查询并将分析设置为空数组。在这里,您将检索查询中的许多对象。因为你已经在循环中 我想你想〜

analytics_array= []

...

if len(analytics) == 100000:
    analytics.save()
    analytics_array.append(analytics)

保存将更新已创建的对象。不确定这是否是您想要的,但错误肯定来自“ Analytic.objects.update(analytics,upsert = False) 这一行。希望这会有所帮助!

答案 1 :(得分:0)

同时更新多个文档,我能够使用文档中用户指南中的原子更新部分来使其工作。  atomic-updates

因此,您的更新应该看起来像

Analytic.objects(query_params='value').update(set__param='value')

query = Analytic.objects(query_params='value')
query.update(set__param='value')

该部分包含您可能想要查看的修改列表。您仍然可能希望在循环之外进行更新,因为您将多次更新查询。