2016-06-27 16 views
0

私は最近、MongoDBとNode.js/Expressで遊び始めましたが、まだいくつかの概念を理解するのが難しいです。レンダリング2つのモンゴークエリの結果を1つのページに表示

初めての質問をお詫び申し上げます。私が学んでいるものをカバーする既存の答えを見つけることができませんでした。

本当に簡単ですが、単ページで2つの別々のmongoクエリの結果を出力したいだけです。グループ化したり、データを何らかの方法で結合する必要はありません。それぞれのクエリの結果を1ページに表示するだけで済みます。

したがって、問題のない単一のクエリをクエリして表示することはできますが、2番目のクエリでは落ちます。サンプルコードでは.jsファイルでクエリを実行し、ページをレンダリングし、結果を配列として渡します。 (私が正しく理解していた場合)ので

 var collection = db.collection('photographers'); 
     collection.find({}).toArray(function(err,result){ 
      if(err){ 
       console.log("Error retrieving records"); 
       res.send(err); 
      }else if (result.length){ 
       console.log("Success"); 
       res.render('ptlist',{ 
        "ptlist":result 
       }); 
      }else{ 
       res.send('No Documents'); 
      } 
      db.close(); 

は、私の見解「ptlist」をレンダリングし、配列ptlistに結果を渡します。

別のコレクションに別のクエリを実行し、結果の配列をビュー 'ptlist'でも使用できるようにする方法を考えることができません。

(簡単な)例が喜んで受け入れられるでしょう。そうでなければ、私がどこかにきれいにコメントされた例があるかもしれないところへのポインタも素晴らしいだろう。

申し訳ありませんが、これはばかげた質問です。このようなものでは、まだ非常に早い時期です。

答えて

2

これは、コードに基づいた最も簡単な解決策になります。

コールバック地獄がありますが、finalResultがビューで消費可能な構造を持っていると仮定しても動作します。

例えば、asyncを使用すると、より良いものにすることができます。 coおよびMongoDB ES6 yieldのように、their sample codeのように。

var collection = db.collection('photographers'); 
collection.find({}).toArray(function(err,result){ 
    var finalResult = {}; 
    if(err){ 
     console.log("Error retrieving records"); 
     res.send(err); 
    } else if (result.length){ 
     console.log("Success"); 
     finalResult.plist = result; 
     collection.find({/* another query */}).toArray(function(err,result){ 
      finalResult.anotherKey = result; 
      res.render('ptlist',{ 
       "ptlist":finalResult 
      }); 
     }); 
    }else{ 
     res.send('No Documents'); 
    } 
    db.close(); 
}); 
+0

現在作業中です。理想のおかげで! – Drum

関連する問題