Добавить еще один элемент в массив mongodb

#node.js #mongodb #mean-stack

#node.js #mongodb #имеется в виду-стек

Вопрос:

Я вставляю данные в массив, но когда я вставляю данные, они перезаписывают весь массив, вот мой маршрутизатор для обновления массива

 router.put('/editbloodbankarray', function(req, res) {
        var editUser = req.body._id; 
        var newName = req.body.bloodbank_array; 
        User.findOne({ _id: editUser }, function(err, user) {
            if (err) throw err; 

                user.bloodbank_array = newName; 

                // Save changes
                user.save(function(err) {
                    if (err) {
                        res.json({ success: false, message: 'error' }); 
                    } else {
                        res.json({ success: true, message: 'Name has been updated!' }); 
                    }
                });

        });             
    });
  

пример документа:

 _id:5c8521c377df3158d0555db1,
bloodbank_array:
[
0:"1"
1:"2"
]
  

Когда я обновляю / вставляю новый элемент, например: 3 .. массив превращается в:

 _id:5c8521c377df3158d0555db1,
bloodbank_array:
[
0:"3"
]
  

Ответ №1:

Вы можете использовать оператор $push, чтобы сделать это напрямую (смотрите здесь для получения дополнительной информации), но поскольку вы уже сначала просматриваете документ, вы могли бы просто сделать user.bloodbank_array.concat(newName); вместо присвоения нового значения массиву, как вы делаете сейчас с user.bloodbank_array = newName . Concat-функция — это стандартная JS-функция, которая вставляет новый элемент в конец массива. Для получения дополнительной информации вы можете прочитать статью Mozilla.

Ответ №2:

Вы перезаписываете существующий массив. Ниже приведена строка

 user.bloodbank_array = newName;
  

Вместо этого выполните цикл for для newName array и вставьте элементы в user.bloodbank_array
нравится

 for(int i=0;i<newName.length;i  )
{
    user.bloodbank_array.push(newName[i]);
}