如何为所有文档生成唯一字段

时间:2020-07-18 12:31:13

标签: mongodb

我想做以下事情:

360x480

我希望db.coll.updateMany( {}, { $push:{ "newField":new ObjectId() } } ) 对于所有文档都具有唯一的ID。但是情况并非如此,因为newField是在驱动程序端生成的。

我该怎么做? MongoDB版本是4.2

3 个答案:

答案 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);
})