我想做以下事情:
360x480
我希望db.coll.updateMany(
{},
{
$push:{
"newField":new ObjectId()
}
}
)
对于所有文档都具有唯一的ID。但是情况并非如此,因为newField
是在驱动程序端生成的。
我该怎么做? MongoDB版本是4.2
答案 0 :(得分:1)
在要添加的字段的查询中使用$ exists:false,循环执行直到更新了零个文档。
MongoDB Enterprise ruby-driver-rs:PRIMARY> db.foo.insert({a:1})
WriteResult({ "nInserted" : 1 })
MongoDB Enterprise ruby-driver-rs:PRIMARY> db.foo.update({new:{$exists:false}},{$set:{new:new ObjectId()}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
MongoDB Enterprise ruby-driver-rs:PRIMARY> db.foo.find()
{ "_id" : ObjectId("5f1b5bcc74541096256ab898"), "a" : 1, "new" : ObjectId("5f1b5bd574541096256ab899") }
答案 1 :(得分:0)
您可以尝试以下方法:
co_await
答案 2 :(得分:0)
对于临时解决方案,您可以尝试
db.coll.find().forEach(function(doc){
doc.newField = doc.newField ? doc.newField : [];
doc.newField.push(new ObjectId());
db.coll.save(doc);
})