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
集合。