如何填充()一个mongoose .findOneAndUpdate对象

时间:2014-06-03 20:08:14

标签: javascript mongoose

以下代码有效,它会更新记录或创建一个记录(如果它还不存在)。但是,我想将此findOneAndUpdate()语句与populate()方法结合使用,以便填充对象的“用户”。将populate("user")语句添加到此逻辑的正确方法是什么?

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

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

    if(err)
    {

    }
    else
    {

    }

    res.json(result);
});

3 个答案:

答案 0 :(得分:29)

使用exec()代替回调参数:

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

答案 1 :(得分:3)

使用async/await我删除了exec

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

答案 2 :(得分:0)

您还可以在 var nameModTypes = [ {"name": "spoilers" , "num": 0}, {"name": "frontBumper" , "num": 1}, ]; function CrearModTypeDiv(){ for (var i = 0; i < nameModTypes.length; i++){ let nombre = nameModTypes[i].name; const div = document.createElement('div'); div.className = 'modType panel'; div.innerHTML = ` <div class="col s12 panel-title"> <h6></h6> </div> <div class="col s12 panel-bottom"> <div class="col s6 panel-col"> <h6 class="grey-text text-lighten-3 panel-label"> <span id= "1" class="total-number"></span> </h6> <button class="button-left"> <i class="material-icons">chevron_left</i> </button> <input class="input-number" type="number" value="0"> <button class="button-right"> <i class="material-icons">chevron_right</i> </button> </div> </div> `; document.getElementById('modTypeContainer').appendChild(div); }; }; 的第三个参数中添加一个 populate 对象作为选项之一,如下所示:

.findOneAndUpdate()