为集合中的每个文档生成一个新的Mongo对象ID?

时间:2014-03-03 21:44:19

标签: mongodb objectid

如何在批量更新中为每个文档创建唯一的对象ID?

我试过了,

db.foo.update({ objectId: null }, { $set: { objectId: new ObjectId() }}, { multi: true })

但是这给了我每个文档的相同对象ID。

3 个答案:

答案 0 :(得分:3)

由于您要为每个文档应用唯一值,因此您需要遍历集合并一次更新一个文档。

在shell中:

db.foo.find({ objectId: null }).forEach(function(doc) {
    doc.objectId = new ObjectId();
    db.foo.save(doc);
});

答案 1 :(得分:1)

目前,您无法在MongoDb中的单个命令中更新多个文档。您可以使用一组通用的更改/更新来更新多个文档,但不能对每个文档进行唯一更改。您需要创建一个循环来迭代shell中的每个文档或您喜欢的编程语言。

答案 2 :(得分:0)

您可以像这样在 MongoDB 中生成对象 ID。您可以遍历您的文档并使用此 mongo 对象 ID。

const ObjectId = require("mongodb").ObjectID;
const id = new ObjectId 
console.log(id)