我正在用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的用户模型,结果始终是“未定义”。
任何帮助将不胜感激:)
答案 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);
}
});