Pymongo如何在更新时设置,而不是在插入时设置



如果发现文档,我将尝试更新文档,否则插入如下

upserts = [UpdateOne({"$and":[{'_id': x['_id']},{'time':{"$lt": x['time']}}]},
{'$setOnInsert': x, '$set':{'time':x['time']}},
upsert=True) for x in batch]
collection.bulk_write(upserts)

然而,我得到了以下错误:

Updating the path 'time' would create a conflict at 'time'

我知道发生这种情况是因为time密钥在setsetOnInsert中都在更新。我无法在setOnInsert中指定字段,因为键不是固定的。如果允许在setOnInsert中排除字段,那么我可以在其中排除time

我该如何解决这个问题?

插入文档时,将同时处理$set$setOnInsert文档。

查询执行器拒绝在一次更新中两次更新同一字段。

您可以尝试使用字典理解从$setOnInsert中删除时间字段,例如:

'$setOnInsert': {i:x[i] for i in x if i!='time'}

相关内容

  • 没有找到相关文章

最新更新