Возможный дубликат:
Почему вы не можете изменить данные, возвращаемые запросом Mongoose (например, findById)
Сначала я делаю запрос к mongoDB, получаю все правильные результаты, но не работает только небольшая модификация литерала объекта. Что я пытаюсь сделать, так это добавить новое поле в комментарии. Я попытался использовать метод DBref, но он не сработал, поэтому сейчас я делаю 2 запроса.
var query = Rss.findOne({ _id: itemId});
query.exec(function(err, feed) {
if (!err && feed.comments) {
console.log(feed.comments.length);
for (var index in feed.comments) {
var author = feed.comments[index].author;
if (author !== undefined) {
User.findById(author, function(err, user) {
/**Problem is here **/
feed.comments[index].name = 'Some random field';
console.log('Added new field' + util.inspect(feed));
});
}
}
}
});
Также ответ без отсутствующего поля .name.
Added new field{ _id: 4f34f343c7b0434217000012,
original_link: 'http://com',
publish_date: Fri, 10 Feb 2012 10:36:00 GMT,
summary: 'some text',
title: 'title exampel',
comments:
[ { body: 'well',
author: 4f30265e6f60dc061d000002,
_id: 4f34f3b6f96c58541700000f,
create_date: Fri, 10 Feb 2012 10:38:46 GMT } ],
create_date: Fri, 10 Feb 2012 10:36:51 GMT }
// ИЗМЕНИТЬ дополнительную информацию
Ну, я не нашел ответа, но кое-как console.log(feed.comments[index]) возвращает ссылку на функцию. Может быть, кто-то, у кого больше опыта работы с мангустами, мог бы объяснить, что было бы обходным путем в этой ситуации.
{ [Function] author: 'Some random field' }
for..in
. Используйте правильный циклfor
с диапазоном. Кроме того,findById
является асинхронным, и вы никогда не фиксируете индекс в новой области, поэтому вы всегда будете использовать самый последний индекс при установке имени. - person loganfsmyth   schedule 10.02.2012(function(index) { ... })(index);
. Это создает и немедленно выполняет новую функцию, поэтому значение индекса внутри функции фиксируется в замыкании с обратным вызовом findOne. - person loganfsmyth   schedule 11.02.2012