Mongoose не обновляет мой массив в базе данных - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь обновить свою коллекцию с помощью mongoose.

Это моя схема:

var FamilySchema = mongoose.Schema({
construction: {
    type: Array,
    default: [
        ["foundry", 0],
        ["farm", 0],
        ["sawmill", 0]
    ]
}
});

И это мой код:

app.put('/construction/updateConstruction/:id', (req, res) => {
let id = req.params.id;

Family.findById(id, (err, familiaDB) => {

    if (err) {
        return res.status(500).json({
            ok: false,
            err
        });
    }

    if (!familiaDB) {
        return res.status(400).json({
            ok: false,
            err
        });
    }

    // I want to update the value of the posicion 0 in the array.
    familiaDB.construction[0][1] = 1;
    familiaDB.save();
    console.log(familiaDB);

});
});

Результатв console.log после выполнения запроса:

Escuchando puerto:  3000
Base de datos ONLINE

{ state: true,    
construction:
[ [ 'foundry', 1 ],
 [ 'farm', 0 ],
 [ 'sawmill', 0 ],
_id: 5bb8d69c604625211c572ada,
__v: 0 }

В console.log все нормально и обновляется, но в моей БД оно не обновляется.Я проверял это много раз в robomongo и никогда не обновлял его.

1 Ответ

0 голосов
/ 06 октября 2018

Самый быстрый способ сделать это будет с findOneAndUpdate :

Family.findOneAndUpdate(
  { _id: mongoose.Types.ObjectId("YOURID") }, 
  { $set: { 'construction.0.1': 'YourValue'  }}
)

Это будет сделано в одном выражении.

Теперь вместо того, чтобы делать это по индексу, вы можете сделать это с помощью $ elemMatch и обновить правильное с помощью:

Family.findOneAndUpdate(
  {_id: ObjectId("YOURID"), 'cons': { $elemMatch: { '0': 'foundry' }}}, 
  { $set: { 'cons.$.1': 'YourValue' } }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...