node.js - MongoDB和Nodejs插入自动递增的ID

标签 node.js mongodb

我是 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/

相关文章:

javascript - 当 promise 在 Redux 中间件内解析时,为什么我无法调度操作?

node.js - 为什么我的 MongoDB ObjectID 不被识别为 TypeScript 中的类型?

node.js - Apollo GraphQL "Cannot return null for non-nullable field Mutation.createUser"

python - Pymongo 按降序对评论进行排序

mongodb - 我可以在 mongod 进程运行时更改副本集的名称吗?

node.js - 将 SailsJS 部署到 Openshift

html - Node.js 服务器应用程序不显示 CSS

javascript - 如何从多个不同的 html 页面获取 mongo db 文档的用户输入?

node.js - 一对多 Mongoose 关系 - 在哪里存储引用

c# - 我如何在 C# 的 mongodb 中通过 bsondocument 查询或查找