我有一个包含大约10万个文档的集合。我想在我的文档中添加一个自动递增的“custom_id”字段,并从现在开始通过递增该字段来继续添加我的文档。
最好的方法是什么?我在官方文档(http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/)中看到了一些例子,但它们只是用于添加新文档,而不是用于更新现有集合。
我根据上面的链接创建的示例代码来增加我的计数器:
function incrementAndGetNext(counter, callback) {
counters.findAndModify({
name: counter
}, [["_id", 1]], {
$inc: {
"count": 1
}
}, {
"new": true
}, function (err, doc) {
if (err) return console.log(err);
callback(doc.value);
})
}
上面的代码counters
是db.counters
集合,我在那里有这个文件:
{_id:"...",name:"post",count:"0"}
很想知道。
谢谢。
P.S。我正在使用js的本地mongojs驱动程序
答案 0 :(得分:1)
好吧,using the link you mentionned,我宁愿使用counters collection approach。
计数器收集方法有一些缺点,包括:
然而,它适用于大多数用途。
你提到的方法("the optimistic loop")不应该破坏IMO,我猜不出你为什么会遇到问题。但是我不推荐它。如果您在多个mongo客户端上执行代码会发生什么情况,如果一个有很多延迟而其他人继续使用ID?我不想遇到这种问题......此外,每次成功操作至少有两个请求,但在成功之前没有最多重试...