在本地MongoDB中自动增量

是的,你可能会认为“这是一个相当复杂的问题”,这可能确实是这样,但是经过几个小时寻找问题的答案,我没有find一个能够真正解决我的问题的答案,说实话,大多数人都是这样的。 所以我会试着做一个不同的问题,所以在这里。

有没有人实际上设法将mongo doco中描述的函数移植到mongodb本地驱动程序中? 我正在使用nodejs,我很难将其移植到本地驱动程序。

function insertDocument(doc, targetCollection) { while (1) { var cursor = targetCollection.find( {}, { _id: 1 } ).sort( { _id: -1 } ).limit(1); var seq = cursor.hasNext() ? cursor.next()._id + 1 : 1; doc._id = seq; targetCollection.insert(doc); var err = db.getLastErrorObj(); if( err && err.code ) { if( err.code == 11000 /* dup key */ ) continue; else print( "unexpected error inserting data: " + tojson( err ) ); } break; } } 

我读了关于nextObject(),toArray(),forEach()等,但仍然无法成功移植它。

有没有人真的设法使这个function发生这种情况? 我正在寻找真正的答案,我知道很多人可能也有兴趣。

我特别要求这个,因为从我的理解来看这个是最安全的,因为其他的build议在尝试同时插入多个文档时有一些缺陷。

不,这不是我的唯一ID,我仍然使用ObjectID,我只需要一个序列号,这将是唯一的每个logging。

如果你已经做到了,请分享! 你会为我节省一点时间! 🙂

谢谢

尝试这个:

 function insertDocument(doc, collection) { collection.find({}, { limit: 1, fields: { _id: 1 }, sort: { _id: -1 } }).toArray(function (err, docs) { var _next = docs.length ? docs[0]._id + 1 : 1; doc._id = _next; collection.insert(doc, function (err, result) { if (err && err.message.indexOf('11000') > -1) { //try again insertDocument(doc, collection); } }); }); }