2012-02-10 2 views
5

가능한 중복 작동하지 않는 객체 :
Why can’t you modify the data returned by a Mongoose Query (ex: 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 } 

// EDIT 자세한 내용

그럼 내가 답을 못 찾았지만 몇 가지 방법을 console.log (feed.comments [인덱스]) 함수 참조를 반환합니다. 어쩌면 몽고제에 대해 더 많은 경험을 가진 사람이이 상황에서 해결 방법이 무엇인지 설명 할 수 있습니다.

+0

함수를 반환하는 것에 대해 모르겠지만 '인덱스'가 원하는 것을 수행하지 않습니다. 'for..in'을 사용하여 배열을 반복해서는 안됩니다. 범위와 함께 적절한'for' 루프를 사용하십시오. 또한 'findById'는 비동기 적이며 인덱스를 캡처하는 일은 결코 새로운 범위가 아니므로 이름을 설정할 때 항상 마지막 인덱스를 사용하게됩니다. – loganfsmyth

+0

네,이 사실, 마지막 문제를 해결하는 가장 좋은 방법은 무엇입니까? –

+1

새로운 범위에서 배열 색인을 캡처해야합니다. 일반적으로 for의 내용을'(function (index) {...}) (index); '로 감싼다. 이렇게하면 새 함수가 만들어지고 즉시 실행되므로 함수 내의 index 값은 findOne 콜백을 사용하여 클로저에 캡처됩니다. – loganfsmyth

답변

10

결과를 적절한 개체로 변환해야합니다. 피드 개체를 수정하기 전에 다음을 호출하기 만하면됩니다.

feed = feed.toObject(); 

그런 다음 원하는 추가 속성을 모두 추가 할 수 있습니다.

+0

고마워요! 이걸 찾는데 몇 시간이 걸렸어! 이제 내가 뭘 찾고 있었는지, API 문서에 대한 링크가 있습니다 : http://mongoosejs.com/docs/api.html#document_Document-toObject – Pascal

관련 문제