[英]node.js - How to return an ObjectId by name in Mongoose
我有以下代码用于将ObjectID设置为productSchema的brand属性:
productSchema.path('brand').set(function (namebrand) {
var brandID;
Brand.findOne({ 'name': namebrand }, 'id name', function (err, result){
if (err) console.log(err);
if (result){
// console.log("Result: "+result);
brandID = result.id;
} else {
var newBrand = new Brand({name:namebrand});
newBrand.save(function (err, newBrandID){
console.log("newBrandID : "+newBrandID)
brandID = newBrandID.id;
});
}
});
return mongoose.Types.ObjectId(brandID);
});
我的问题是,当执行Brand ObjectID setter时,例如,我得到了不同的ObjectId:
return mongoose.Types.ObjectId(brandID); // 52ffaa218050b7c4652502de
console.log("newBrandID : "+newBrandID) // newBrandID : { __v: 0, name: 'new Brand name', _id: 52ffaa218050b7c4652502df }
那么做我想做的正确方法是什么? 我是这个新手:/
PS:预先感谢,对不起我的英语。
您不能在此处使用返回值。 猫鼬set
需要是同步的,而您正在进行异步的数据库查询。 首先在数据库中查找品牌,然后在产品上进行设置。
var productModel; // you must already have loaded this
var namebrand = "somebrand";
Brand.findOne({ 'name': namebrand }, 'id name', function (err, result){
if (error) {
console.error(error);
return;
}
if (result){
productModel.brand = result._id;
} else {
var newBrand = new Brand({name:namebrand});
productModel.brand = newBrand._id
newBrand.save(function (err, newBrandID){
console.log("newBrandID : "+newBrandID)
brandID = newBrandID.id;
});
}
productModel.save();
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.