如何在猫鼬中按名称返回 ObjectId



我有以下代码用于将 ObjectID 设置为产品架构的品牌属性:

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);
});

我的问题是当品牌对象ID设置器执行时,我得到了不同的对象ID例如:

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();
});

最新更新