2016-03-19 3 views
0

私のプロジェクトでMongoDB操作にMongooseを使用しています。私がしようとしている:見つかったから複数のドキュメントのフィールドをオブジェクトに保存する

  • は、新しいオブジェクトを作成するすべての文書照合クエリを見つけるすべての文書は、フィールドの保存objects
  • 内に新しいオブジェクトを作成したため
  • (のはそれobjectsを呼びましょう)ドキュメントを作成したオブジェクト

これはうまくいきます。私objects文書が発見された場合、別のコレクション

  • 内の1つの文書照合クエリを見つける(新しいキーなど)以前に作成したオブジェクトobjects
  • に、そこからフィールドを救うの内側に保存されたすべてのオブジェクトの

    • :しかし、私はまたしたいです第二部のための

    私のコードは次のようになります。

    for(var i in objects) { 
        if(objects.hasOwnProperty(i)) { 
        Model.findOne({name: objects[i].name, id: objects[i].id}, function(e, document) { 
         if(e) console.error(e); 
         if(document) { 
         console.log("Found matchind document"); //This is showed for each object, as expected. 
         objects[i].newField = document.someData; 
         objects[i].evenNewerField = document.someMoreData; 
         } 
        }); 
        } 
    } 
    console.log(objects); //This shows old data from previous operations, no new data from the for loop 
    

    答えて

    1

    あなたの問題はあなたがshoul、あなたのマングースの使用状況ではありませんdはJavascriptのスコープと非同期を深く見ています。あなたのコードでconsole.logが呼び出されると、オブジェクトはまだ更新されていません。

    +0

    私は数分前にそれを理解しました。これをどうすればいいですか? –

    +0

    私はそれを行うための良い方法は実際には表示されません、それはJavaScriptの問題です、あなたはどこでも/には使用できません。約束やイベントシステムを使いたいと思うかもしれません。しかし、私は最良の方法はあなたのコールバックであなたのconsole.log(またはあなたが代わりにやりたいこと)を呼び出すことだと思う(すべての繰り返しでそれを行うため)。あなたが一度だけ呼び出す何かを持っていない限り、それは私の意見では最良の方法です – Spouark

    +0

    ポイントは、私はページ(エクスプレス)をレンダリングしているので、forループの後にそれを呼び出したいです。私はそれをループに入れましたが、ループが最後に実行されているときだけ呼び出します。それは部分的には機能しますが、それでも私が望む結果は得られません。私はあなたの答えを受け入れるでしょう、どのように私は解決策を探すべきかを指摘しています。 –

    関連する問題