#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]);
}