#mongodb #node.js #mongoose
#mongodb #node.js #mongoose
Вопрос:
У меня есть встроенный документ с изображением в моем основном документе, и я могу обновить его следующим образом. Каждый раз, когда он обновляется, он просто переопределяет существующее изображение и не добавляет его к существующим изображениям.. Я попытался с помощью «{images.push: image}», но это не сработало. каков синтаксис? Я не уверен, смогу ли я объяснить проблему. если нет, пожалуйста, дайте мне знать, нужно ли мне добавить сюда больше информации.
var image = {
img : new_file_name,
orig_img_name : files.source.filename,
caption : fields.message,
upload_date : new Date()
};
RentModel.update({'facebook_id':fb_id, 'prop_location.lat':lat, 'prop_location.lng':lng}, {'images':image}, function(err, docs){
if(err) {
console.log("Error during friends update");
throw err;
}
console.log('image updated to database', new_file_name);
});
Ответ №1:
сначала попробуйте find()
внедренный документ, а затем добавьте image
в массив.
RentModel.find({'facebook_id':fb_id, 'prop_location.lat':lat, 'prop_location.lng':lng}, function (err, item) {
if (err) //throw ...
if (item) {
if (item.images amp;amp; item.images.length) {
item.images.push(image);
}
else {
item.images = [image];
}
// save changes
item.save(function (err) {
if (!err) {
// done ...
}
});
}
});
Комментарии:
1. Спасибо. это именно то, что я искал.. попробую это .. кстати, я задаю очень простой вопрос, почему вы использовали «! ==» вместо «!=»
2. они были строго «не равны» — но я удалил их и изменил код, чтобы его было легче понять 😉
3. Ваш код в порядке. Я думаю, что проверка на наличие изображений «если (item.images amp;amp; item.images. длина).. else {}» может не потребоваться. Я делаю это, не проверяя, есть ли у изображений какие-либо данные или нет. достаточно просто выполнить item.images.push (изображение);, и он работает нормально.