现有集合的增量字段

时间:2015-08-08 18:09:03

标签: mongodb

我有一个包含大约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);
    })
}

上面的代码countersdb.counters集合,我在那里有这个文件:

{_id:"...",name:"post",count:"0"}

很想知道。

谢谢。

P.S。我正在使用js的本地mongojs驱动程序

1 个答案:

答案 0 :(得分:1)

好吧,using the link you mentionned,我宁愿使用counters collection approach

计数器收集方法有一些缺点,包括:

  • 它总是生成多个请求(两个):一个用于获取序列号,另一个用于通过序列获得的ID进行插入,
  • 如果您正在使用mongodb的分片功能,则可能会使用负责存储计数器状态的文档,并且每次都会到达同一服务器。

然而,它适用于大多数用途。

你提到的方法("the optimistic loop")不应该破坏IMO,我猜不出你为什么会遇到问题。但是我不推荐它。如果您在多个mongo客户端上执行代码会发生什么情况,如果一个有很多延迟而其他人继续使用ID?我不想遇到这种问题......此外,每次成功操作至少有两个请求,但在成功之前没有最多重试...