Javascript node.js-如何在Mongoose中按名称返回ObjectId
我有以下代码用于将ObjectID设置为productSchema的brand属性:Javascript node.js-如何在Mongoose中按名称返回ObjectId,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,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){
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);
});
我的问题是当品牌ObjectID设置器执行时,我得到了不同的ObjectID
例如:
return mongoose.Types.ObjectId(brandID); // 52ffaa218050b7c4652502de
console.log("newBrandID : "+newBrandID) // newBrandID : { __v: 0, name: 'new Brand name', _id: 52ffaa218050b7c4652502df }
那么,做我想做的事情的正确方法是什么?我是这方面的新手:/
注意:提前谢谢,我的英语很抱歉。这里不能使用返回值。mongoose
集合
需要同步,并且您正在进行一个异步的DB查询。首先在DB中查找品牌,然后将其设置在产品上
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();
});
谢谢,所以我必须在保存产品的处理程序中添加代码,对吗?是的,正确。总的来说,我的建议是尽量少用猫鼬。使用模式和查询,但从长远来看,将代码与剩余的神奇功能紧密结合可能是不明智的。