仅当状态为0或状态2时,我才尝试更新某个位置。如果状态为1,则不更新。我只有该位置的一个副本。
Property.findOneAndUpdate({ status: 0, location: req.body.update.location }, req.body.update, err => {
if (err) return res.json({ success: false, error: err });
return res.json({ success: true });
});
Property.findOneAndUpdate({ status: 2, location: req.body.update.location }, req.body.update, err => {
if (err) return res.json({ success: false, error: err });
return res.json({ success: true });
});
但是,即使状态为1,上述代码也会更新属性。
Property.find({location: req.body.update.location}, (err, Propertyz) => {
myProperty = Propertyz
console.log(myProperty[0].status)
if(myProperty[0].status != 1) { // returns and doesn't update if true
console.log("updating")
Property.findOneAndUpdate({ location: req.body.update.location }, req.body.update, err => {
if (err) return res.json({ success: false, error: err });
return res.json({ success: true });
});
}
else {
console.log("rejecting")
return res.json({ success: true });
}
})
我将其更改为此并且可以工作,但是我不明白为什么前一个功能不起作用,或者是否有办法将前两个功能浓缩为一个功能。
答案 0 :(得分:2)
Property.findOneAndUpdate({ $or: [{ status: 0, status: 2 }] }, { location: req.body.update.location }, err => {
if (err) return res.json({ success: false, error: err });
return res.json({ success: true });
});
答案 1 :(得分:1)
您可以使用一个findOneAndUpdate函数对其进行更新,在查询中添加$ or运算符。 https://docs.mongodb.com/manual/reference/operator/query/or/。下面的代码搜索状态为2或0的文档。
Property.findOneAndUpdate({ $or: [{status: 2}, {status: 0}], location: req.body.update.location }, req.body.update, err => {
if (err) return res.json({ success: false, error: err });
return res.json({ success: true });
答案 2 :(得分:1)
Property.findOneAndUpdate({ status: 0, location: req.body.update.location }, { $set:req.body.update} , err => {
if (err) return res.json({ success: false, error: err });
return res.json({ success: true });
});
Property.findOneAndUpdate({ status: 2, location: req.body.update.location }, { $set:req.body.update} , err => {
if (err) return res.json({ success: false, error: err });
return res.json({ success: true });
});