从数据库检索的MongoDB findOne()

时间:2018-08-07 05:36:53

标签: javascript node.js mongodb

我正在用nodejs / MongoDB编写代码,并且正在解决我希望获得帮助的特定问题:

我在模型中定义了各种模式,并且我注意到,对于每个MongoDB,它们都会自动填充一个唯一的ID,该ID由_id字段表示。

但是,我对创建自定义ID感兴趣,该ID本质上是一个自动递增的整数。我通过利用'mongoose-auto-increment'npm软件包来做到这一点。例如,在我的UserSchema中:

UserSchema.plugin(passportLocalMongoose);

module.exports = mongoose.model("User", UserSchema);
autoIncrement.initialize(mongoose.connection);
UserSchema.plugin(autoIncrement.plugin, {
  model: 'UserSchema',
  field: 'user_id',
  startAt: 1,
  incrementBy: 1
});

为了加快我的应用程序的速度,我有一个seed.js文件,该文件旨在在应用程序初始化时加载一堆数据。但是,要使其完全起作用,我需要一种访问模型并将其引用到其他模型的方法(对于存在一对一和一对多关系的情况)。由于mongoDB的默认_id太长,除非我实际上在html页面上并且可以使用req.params.id函数,否则无法获得结果,所以我一直在尝试使用mongoDB的{{1 }}函数无法成功执行此操作。

例如:

findOne

但是,即使我知道数据库中保存了一个User_id为25的用户模型,结果始终是“未定义”。

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:1)

User.findOne({ user_id: 25 }).exec(function (err, record) {
                    if (err) {
                        console.log(err);
                    } else {
                       console.log(record);
                    }
                });

答案 1 :(得分:0)

您需要了解Node.js的本质。 Node.js以异步方式运行,因此您无法在此处获得结果。 您需要使用其他方式

喜欢:

  

使用回调

     

使用承诺

     

使用async / await(ES8)

尝试一下:

User.findOne({user_id: {$type: 25}}, function (err, myDocument) {
  if (myDocument) {
    var myName = myDocument.user_id;
    console.log(myName);
  } else {
    console.log(err);
  }
});