繁体   English   中英

node.js-如何在Mongoose中按名称返回ObjectId

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM