MongoDB "$or" 更新

1 投票
1 回答
576 浏览
提问于 2025-04-17 03:39

我有一些代码是用来从Mongo数据库中删除多个对象的,使用的是一个叫做$or的操作符,或者说应该是这样。这段代码基本上展示了我的应用程序在做什么。

lookup = []
listofids = ['4e86fee56607f2a8a2000002','4e86fee56607f2a8a2000003','4e86feeb6607f2a8a2000006']
for id in listofids:
    lookup.append({'_id':core.ObjectId(id)})

r = self.db().photos.update({
    "$or":lookup
},{
    '$set':{'var':'value'}
})

但是这段代码不管用,它没有更新任何文档。不过如果我把代码改成一个基本的查找

lookup = []
listofids = ['4e86fee56607f2a8a2000002','4e86fee56607f2a8a2000003','4e86feeb6607f2a8a2000006']
for id in listofids:
    lookup.append({'_id':core.ObjectId(id)})

r = self.db().photos.find({
    "$or":lookup
})

for rs in r:
    self.write(str(rs)+"\n\n")

它就能输出所有的记录。我该怎么让Mongo更新这些记录呢?

这里的self.db()指的是一个MongoDB数据库,photos是其中的一个集合。

这段代码是用Python写的,但我想语法应该很容易理解。

1 个回答

3

你需要把 multi 参数设置为 True,这样才能更新所有符合你查询条件的文档。否则,它只会更新第一个文档(你可能没注意到这一点)。详细信息可以查看 Collection.update

(另外,如果你要查询某个字段的多个值,可以使用 $in 操作符。)

撰写回答