thể trùng lặp:
Why can’t you modify the data returned by a Mongoose Query (ex: findById)mongoose Sửa đổi đối tượng kết quả theo nghĩa đen không hoạt động
Trước tiên tôi đang làm cho các truy vấn để MongoDB, nhận được tất cả các kết quả đúng nhưng chỉ thay đổi nhỏ để đối tượng chữ không hoạt động. Điều tôi đang cố gắng làm là thêm trường mới vào nhận xét. Tôi đã cố gắng sử dụng phương pháp DBref nhưng nó đã không làm việc vì vậy tôi thực hiện 2 truy vấn ngay bây giờ.
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));
});
}
}
}
});
Ngoài ra, phản hồi là trường này không có trường .name bị thiếu.
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 }
// EDIT biết thêm thông tin
Vâng tôi đã không tìm thấy câu trả lời nhưng một số cách console.log (feed.comments [index]) trả về tham chiếu đến hoạt động. Có thể ai đó có nhiều kinh nghiệm hơn với người Mông Cổ có thể giải thích điều gì sẽ là giải pháp trong tình huống này.
{ [Function] author: 'Some random field' }
Tôi không biết về việc trả lại hàm, nhưng 'chỉ mục' của bạn không làm những gì bạn muốn. Bạn không nên lặp qua mảng bằng cách sử dụng 'for..in'. Sử dụng vòng lặp 'for' thích hợp với một dải ô. Ngoài ra 'findById' là không đồng bộ và bạn không bao giờ bắt chỉ mục là một phạm vi mới, vì vậy bạn sẽ luôn sử dụng chỉ mục cuối cùng khi đặt tên. – loganfsmyth
có điều này đúng không, cách tốt nhất để giải quyết vấn đề cuối cùng là gì? –
Bạn sẽ cần phải nắm bắt chỉ mục mảng trong một phạm vi mới. Thông thường bạn sẽ bọc nội dung của giao diện bằng '(hàm (chỉ mục) {...}) (chỉ mục);'. Điều đó tạo ra và ngay lập tức thực hiện một hàm mới, do đó giá trị của chỉ mục bên trong hàm được bắt trong một bao đóng với hàm gọi lại findOne. – loganfsmyth