当前位置: 首页 > 知识库问答 >
问题:

MongoDB和Nodejs使用自动递增插入ID

姬坚成
2023-03-14
 > 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();
});

共有1个答案

西门奇希
2023-03-14

假设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教程,直接在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集合,并添加了一个带有’entityId’的_id的页面。从这里我不确定如何使用猫鼬来更新该页面并获取递增编号。 没有计数器的架构,我希望它保持这种状态,因为这实际上不是应用程序使用的实体。仅应在模式中使用它来自动递增字段。 问题答案: 这是一个示例,如何在Mongoose中实现自动增量字段:

  • 问题内容: 我需要一些帮助,以便在mongodb和nodejs中按日期查找记录。 我将日期添加到抓取脚本中的json对象中,如下所示: 该对象被插入到mongodb中。我可以看到如下: 然后在我的nodejs脚本中执行findOne(): 找不到对象。如果我从对象中删除last_updated字段,则会找到它,因此绝对是问题所在。 如果我按以下方式隔离字段: 什么也没有回来。请问我做错了什么? 问

  • 问题内容: 嗨,我想使用Java在mongodb中自动递增。我对此完全陌生。在文档中,我找到了这样的解决方案: 谁能建议我如何使用Java做到这一点?我对此完全陌生。 问题答案: 首先使用“ 创建自动递增序列字段”,您应该使用mongoDB shell创建集合,并且集合应为: 因此,您将获得包含如下字段的集合,现在在Java中创建函数,并且此函数具有作为字符串的参数,因此如下所示: } 上面的函数

  • 我有两个表,其中主键(另一个表上的外键)在运行时自动递增(使用TOAD for mysql)。如何使用事务将数据同时插入两个表中。 这是第一个表的ddl: 第二个表的ddl: 注意:主要的挑战是从主键上获取自动递增的键值,以便在运行时插入到另一个表中。 提前谢谢。

  • 问题内容: 我有一个PreparedStatement,例如: 如您所见,Employee表具有一个自动递增的ID。我基本上也需要使用prepareStatement自动添加它。有人可以告诉我我要去哪里哪里并纠正我吗?现在,这只是给我一个与Statement相关的错误。 问题答案: 将该列 完全 放在语句之外。它将由数据库引擎生成。您的查询应为: __ 其次,您必须先执行插入操作,然后再从结果中取

  • 主要内容:使用 counters 集合,创建 Javascript 函数,使用 Javascript 函数MongoDB 中没有像 SQL 中那样可以赋予某个字段自动递增的功能,默认情况下 MongoDB 的 _id 字段是系统自动生成的 12 字节的唯一标识,但是在某些情况下我们可能需要在 MongoDB 的某个字段上实现类似 SQL 中的自动递增功能。 因为 MongoDB 中没有实现这个功能,所以我们需要通过编程的方式来实现。本节中我们将通过两个集合(counters 和 tutorial