[英]Auto-increment in Native MongoDB
是的,您可能会想到“这是一个重复的问题”,的确是这样,但是在寻找问题的答案大约几个小时之后,我却找不到一个可以真正解决我的问题的答案,并且老实说,大多数问同一件事的人。 因此,我将尝试提出一个不同的问题,所以就到这里了。
有人真的设法将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()等的信息,但仍无法成功移植。
有没有人真的设法通过此功能实现了这一目标? 我正在寻找真正的答案,我知道很多人也可能对此感兴趣。
我特别要问这个问题,因为根据我的理解,这是最“安全”的一个,因为其他建议在尝试同时插入多个文档时存在一些缺陷。
不,这不是我的唯一ID,我仍在使用ObjectID,我只需要一个序列号,该序列号对于每条记录都是唯一的。
如果您已完成,请分享!!! 您将为我节省时间! :)
谢谢
尝试这个:
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);
}
});
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.