Node.js 本机MongoDB中的自动增量
是的,你可能会想到“这是一个相当重复的问题”,这可能是真的,但在花了大约几个小时寻找问题的答案后,我没有找到一个真正解决我问题的答案,老实说,大多数问同样问题的人。所以我要试着提出一个不同的问题,现在开始 是否有人真的将mongo doco中描述的功能移植到mongodb本机驱动程序中?我正在使用nodejs,我很难将它移植到它的本机驱动程序Node.js 本机MongoDB中的自动增量,node.js,mongodb,Node.js,Mongodb,是的,你可能会想到“这是一个相当重复的问题”,这可能是真的,但在花了大约几个小时寻找问题的答案后,我没有找到一个真正解决我问题的答案,老实说,大多数问同样问题的人。所以我要试着提出一个不同的问题,现在开始 是否有人真的将mongo doco中描述的功能移植到mongodb本机驱动程序中?我正在使用nodejs,我很难将它移植到它的本机驱动程序 function insertDocument(doc, targetCollection) { while (1) { va
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);
}
});
});
}
您可以使用这样的代码来获得唯一的顺序ID(但请注意,正如本文要点中的注释所示,这会产生一些后果),因此我询问了上述代码的原因。正如我所说,从所有选项中,上面的一个似乎是最“安全”的。如果我可以这么说的话,这正是我想要的。谢谢@levi!:P