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

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){

我有以下代码用于将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);
});
我的问题是当品牌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();
});

谢谢,所以我必须在保存产品的处理程序中添加代码,对吗?是的,正确。总的来说,我的建议是尽量少用猫鼬。使用模式和查询,但从长远来看,将代码与剩余的神奇功能紧密结合可能是不明智的。