我试图弄清楚如何更新 MongoDB 集合中的所有文档,并将特定字段的值设置为其当前值的负数。
这是我迄今为止所尝试过的。
filter = {'field_name': {'$lt': 0.0}}
mapping = {'$set': {'$field_name', -'$field_name'}}
documents = collection.update_many(filter=filter, update=mapping)
我真的不确定我是否朝着正确的方向前进,因为我发现很难理解官方文档。
我认为执行此操作的另一种可能方法可能是使用
find()
不带过滤器迭代所有文档,并对每个文档执行更新操作。
这似乎可能无法按预期工作,因为文档将被修改,在迭代文档集合时会出现某种未定义的行为?
旁白:如果通过 Python 采取使用
update_many
的方法,那么使用 Python 似乎根本没有意义,直接使用 mongosh
在数据库上运行此查询会更有效。
使用此link作为参考,我设法在
mongosh
中编译以下语句
db.pseudodata.updateMany({'field_name': {$lt: 0.0}}, [{$set: {field_name: -"$field_name"}}]
需要几个小时才能完成运行。当它发生时,我会知道它是否做了我希望它要做的事情,或者我是否只是破坏了我的数据。