2012-02-10 8 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 [インデックス])関数への参照を返します。たぶん、mongoosejsの経験が豊富な人は、この状況で何が回避策になるのか説明できます。

+0

関数を返すことについてはわかりませんが、あなたの 'インデックス'はあなたが望むことをしていません。 'for..in'を使って配列をループしてはいけません。範囲に適切な 'for'ループを使用してください。また、 'findById'は非同期で、インデックスをキャプチャすることは決して新しいスコープではありませんので、名前を設定するときには常に最後のインデックスを使用します。 – loganfsmyth

+0

はい、これは本当ですか、最後の問題を解決するにはどうすればよいでしょうか? –

+1

新しいスコープで配列インデックスを取得する必要があります。通常は 'for(function(index){...})(index); 'でforの内容をラップします。これは新しい関数を作成して直ちに実行するので、関数内のindexの値はfindOneコールバックを使ってクロージャ内に取り込まれます。 – loganfsmyth

答えて

10

結果を適切なオブジェクトに変換するようにMongooseに指示する必要があります。フィードオブジェクトを変更する前に、次のコードを呼び出してください:

feed = feed.toObject(); 

さらに、追加するすべてのプロパティを追加できます。

+0

ありがとう!これを見つけるのに数時間かかりました!ここで私が探していたことを知ったので、ここにAPIドキュメントへのリンクがあります:http://mongoosejs.com/docs/api.html#document_Document-toObject – Pascal

関連する問題