[英]mongodb/mongoose findOneandUpdate how to get index and delete object
[英]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.