Mongoose / MongoDb FindOneAndUpdate не работает должным образом - PullRequest
3 голосов
/ 25 марта 2019

Я пытаюсь обновить определенное местоположение, только если его статус: 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 });
    }
})

Я изменил это на это, и это работает, но я не понимаю, почему предыдущая не работала или был способ объединить две предыдущие функции в одну.

Ответы [ 3 ]

2 голосов
/ 25 марта 2019
      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 голос
/ 25 марта 2019
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 });
});
1 голос
/ 25 марта 2019

Вы можете обновить его, используя одну функцию findOneAndUpdate, добавив $ или оператор по вашему запросу.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 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...