MongoDB和Nodejs自动增加插入ID

我是NodeJs和MongoDB的新手,我想用自动增量主键'id'插入行。 还在mongo服务器上定义了一个名为getNextSequence的函数。

这在Mongodb服务器上是完美的

> db.user.insert({ "id" : getNextSequence('user_id'), "username" : "test", "email" : "test@test.com", "password" : "test123" }) 

现在我想插入NodeJs.I已经尝试过,但不工作

 db.collection('user').insertOne({ id : "getNextSequence('user_id')", username : query.name, email: query.email, password: query.pass }, function(err, result) { assert.equal(err, null); console.log("row insterted "); callback(); }); 

假设getNextSequence是一个服务器脚本函数(也就是您通过db.system.js.save定义和保存的方法),它不能在服务器之外调用。 一种方法是使用eval ,这会强制服务器将string评估为js代码,尽pipe这不是一个好的做法。 这里是一个例子:

 db.eval('getNextSequence(\'user_id\')', function(err, result) { db.collection('users').insert({ "id" : result, "username" : "test", "email" : "test@test.com", "password" : "test123" }); }); 

另一种方法是遵循mongo教程,并直接在NodeJS中实现getNextSequence 。 语法几乎相同:

 function getNextSequence(db, name, callback) { db.collection("counters").findAndModify( { _id: name }, null, { $inc: { seq: 1 } }, function(err, result){ if(err) callback(err, result); callback(err, result.value.seq); } ); } 

然后在你的nodeJS代码中使用它:

 getNextSequence(db, "user_id", function(err, result){ if(!err){ db.collection('users').insert({ "_id": result, // ... }); } }); 

注意 :当然,您需要按照文档中的说明设置counters集合。