Javascript 如何填充()mongoose.findOneAndUpdate对象

Javascript 如何填充()mongoose.findOneAndUpdate对象,javascript,mongoose,Javascript,Mongoose,下面的代码是有效的,它会更新一条记录,或者在记录不存在时创建一条记录。但是,我想将此findOneAndUpdate()语句与populate()方法结合起来,以填充对象的“用户”。将populate(“user”)语句添加到此逻辑中的正确方法是什么 我尝试在findOneAndUpdate完成后添加populate()方法,但返回一个错误,说明此方法不存在。我正在运行最新版本的猫鼬 LoyaltyCard.findOneAndUpdate({ business: businessid}, {

下面的代码是有效的,它会更新一条记录,或者在记录不存在时创建一条记录。但是,我想将此
findOneAndUpdate()
语句与
populate()
方法结合起来,以填充对象的“用户”。将
populate(“user”)
语句添加到此逻辑中的正确方法是什么

我尝试在
findOneAndUpdate
完成后添加
populate()
方法,但返回一个错误,说明此方法不存在。我正在运行最新版本的猫鼬

LoyaltyCard.findOneAndUpdate({ business: businessid}, { $set: newCard, $inc: { stamps: +1 } }, { upsert: true}, function(err, card){

    if(err)
    {

    }
    else
    {

    }

    res.json(result);
});
使用
exec()
而不是回调参数:

LoyaltyCard.findOneAndUpdate(
        {business: businessid},
        {$set: newCard, $inc: {stamps: +1}},
        {upsert: true}
    )
    .populate('user')
    .exec(function(err, card) {
        if (err) {
            // ...
        } else {
            res.json(result);
        }
});

使用
async/await
I删除了exec

const getLoyaltyCard = async () => {
    const results = await LoyaltyCard.findOneAndUpdate(
        { business: businessid },
        { $set: newCard, $inc: { stamps: + 1 } },
        { upsert: true }
    )
    .populate('user')
    return results
}

您还可以在
.findOneAndUpdate()
的第三个参数中添加一个
填充
对象作为选项之一,如下所示:

LoyaltyCard.findOneAndUpdate(
        { business: businessid },
        { $set: newCard, $inc: { stamps: +1 } },
        { upsert: true, populate: { path: 'user' } }
    )
    .exec(function(err, card) {
        if (err) {
            // ...
        } else {
            res.json(result);
        }
});
exec()
实际上把它变成了与async/await一起使用的完整承诺