2017-01-04 4 views
0

他の2つのドキュメントへの参照を保持するMongoDBのドキュメントがあります。私はオブジェクトをその参照しているドキュメントの詳細と共に返すget rest APIを持っています。私はブローコードを書いた。コードが動作しているが、非同期読み出しに私が取得していますことを応答が備わり起因empty.`router.getある(「/」、関数(REQは、RES){NodeJSのMongoDBから埋め込まれたドキュメントデータを読み込んだ後に応答を送信する方法

LibraryTransaction.find({},function(err,data){ 

    if(err){ 
     res.send(err.message); 
    } 
    else{ 

     var transactions=[]; 
     data.forEach(function(element){         
      debugger; 
      var transaction ={}; 
      var BookName=''; 
      var ISBNNumber=''; 
      var UserName=''; 



      Book.findOne({_id:element.book},function(err,book){ 
       debugger; 

       if(!book){ 
        res.send("Book not found please check ISBN number."); 
       } 
       else{   

        BookName = book.name; 
        ISBNNumber= book.isbnNumber; 
        User.findOne({_id:element.user},function(err,user){ 
         debugger; 
         if(!user){ 
          res.send("User not found."); 
         } 
         else 
         { 
          UserName=user.userName; 
          transaction.bookName=BookName; 
          transaction.iSBNNumber=ISBNNumber; 
          transaction.userName=user.userName; 
          transaction.IssueDate=element.issueDate; 
          transaction.DueDate=element.dueDate; 
          transaction.TransactionType=element.transactionType;  
          console.log(BookName);; 
          transactions.push(transaction); 
         } 
        });   
       } 
      });     
     }); 
     console.log("Send"); 
     res.send(transactions);   
    } 
}); 

})。 `

私は、Book and UserドキュメントのrefrenceとbookIssueDate、DueDateなどのその他の詳細を保持するトランザクションドキュメントを持っています。ブック名、ユーザ名、ブック発行日、帳簿期限のデータを返したいと思います。しかし、私は書籍の発行日と期日データのみを取得していますが、書籍名とユーザー名は取得していません。しかし、そのデータを読み取るコードは、再現性のある文書を形成します。

誰かがNode.jsでこれを処理する適切な方法を理解できますか?

+0

うわー、それはだ、完全な非効率的な、今までに(この場合は)文の内部クエリを実行していません –

答えて

0

この場合、すべてのIDを配列にマップし、配列内の_idを持つすべての書籍を検索します。そのクエリの後にすべての書籍があり、それらを操作できます。そして明らかにres.sendか、コールバックで何でもしてください。

LibraryTransaction.find({},function(err,data){ 
 

 
    if(err){ 
 
     res.send(err.message); 
 
    } 
 
    
 
    else{ 
 

 
     var transactions=[]; 
 
     var bookIds = data.map(function(element) { return element.book; }); 
 
     
 
     Book.find({ _id: { $in: bookIds }}, function(err, books) { 
 
      
 
      // Do whatever with books and send back the response, with res.. blah! 
 
      
 
     });  
 
    } 
 
});

関連する問題