我是 NodeJs 和 MongoDB 的新手,我想插入带有自动增量主键“id”的行。还在 mongo 服务器上定义了一个名为 getNextSequence 的函数。
这在 Mongodb 服务器上运行完美
> db.user.insert({
"id" : getNextSequence('user_id'),
"username" : "test",
"email" : "test@test.com",
"password" : "test123"
})
现在我想从 NodeJs 插入。我已经尝试过但不起作用
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
,它强制服务器将字符串计算为 js 代码,尽管这不是一个好的做法。这是一个例子:
db.eval('getNextSequence(\'user_id\')', function(err, result) {
db.collection('users').insert({
"id" : result,
"username" : "test",
"email" : "test@test.com",
"password" : "test123"
});
});
<小时/>
另一种方法是遵循mongo tutorial并直接在 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
集合。
关于node.js - MongoDB和Nodejs插入自动递增的ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40979391/