Node、Express、およびバックボーンを使用した設定があります。すべてがうまくいき、idや全従業員の従業員を取得するのと同じくらいシンプルなときにMongoDBコレクションからレコードを取得することができます。私はトラブルの理解を抱えていることは、次のような、より複雑なクエリ構文を必要とするMongoDBのコレクションを取得する方法である:MongoDBを使用して `has many`関連でクエリを実行する方法
db.employees.aggregate(
[
{ $group : { _id : "$managerName", employees: { $push: "$fullName" } } }
]
)
I現在、私はJSONオブジェクトとして公開するデータを抽出するためには、次の構文を持っています私のhtmlページの要素にバインドします。
exports.findById = function(req, res) {
var id = parseInt(req.params.id);
db.collection('employees', function(err, collection) {
collection.findOne({'id': id}, function(err, item) {
res.jsonp(item);
});
});
};
私はすべてのマネージャのリストを取得したいと彼らに報告し、何とかリストの見出しとしてマネージャーをリストし、個々のdiv要素に設定され、この結果をバインドして、レポートのすべての従業員が彼らの従業員リストアイテムとしてそれらに追加します。結果セットは基本的に親と子で構成されます。私はバックボーンを使ってこれを動的にやりたい
私はMongoDBのためのアグリゲーションパイプライン
exports.findRelations = function(req, res) {
db.collection('employees', function(err, collection) {
collection.aggregate({ $group : { _id : "$managerName", employees:{$push: "$fullName" } } }, function(err, item) {
res.jsonp(item);
});
});
};
ありがとうございました。私はそれを働かせましたが、奇妙なことがあります。私がrobomongoで私のMongoDBスクリプトを実行すると、マネージャーによる従業員のリストである正しい結果が得られます。したがって、すべてのマネージャーがリストされ、次にネストされると、それらに報告するすべての従業員が表示されます。しかし、上記のように私のコードで同じ正確な構文を使用すると、私の得た結果セットは、私のMongoDBスクリプトが無視されているかのように、私のコレクション内のすべてのレコードになります。それはなぜでしょうか? –
あなたはRoboMongoでどのコードを実行しましたか? – gnerkus
私は今あなたの質問を理解すると思います。 MongoDBクライアント(RoboMongo経由)の構文とMongoDBのNode.jsドライバの構文は異なります。クライアントは 'db.employees'という形式でクエリを要求しますが、Node.jsドライバはこの形式のクエリを必要とします:' db.collection( 'employees') ' – gnerkus