以下代码有效,它会更新记录或创建一个记录(如果它还不存在)。但是,我想将此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);
});
答案 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()