簡體   English   中英

如何填充()貓鼬 .findOneAndUpdate 對象

[英]how to populate() a mongoose .findOneAndUpdate object

下面的代碼有效,它會更新一條記錄,如果尚不存在則創建一條記錄。 但是,我想將此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我刪除了 exec

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

您還可以在.findOneAndUpdate()的第三個參數中添加一個populate對象作為選項之一,如下所示:

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

只是加強@rahulchouhan 的回答:

您可以將填充添加為選項之一,它是 findOneAndUpdate 函數的第三個參數,它的工作方式與任何其他承諾一樣(然后,捕獲)

LoyaltyCard.findOneAndUpdate(
        { business: businessid },
        { $set: newCard, $inc: { stamps: +1 } },
        { upsert: true, populate: { path: 'user' } }
    )
    .then(card => {
       res.status(200).json(card);
    }).catch(err => {
       res.status(500).json({ message: err.message});
    });
        

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM