シェルで必要なクエリを作成しましたが、マングースでの記述に問題があります。
db.commentstreams.group({ key: { page_id: true }, reduce: function(obj,prev) { prev.num_comments += obj.num_comments }, initial: { num_comments: 0 } })
私はマングースの構文に少し混乱しています。おそらく誰かがこれに光を当てることができます。どうもありがとう。
この投稿 によると:
Model.find({}, [fields], {'group': 'FIELD'}, function(err, logs) {
...
});
残念ながら、これに関するドキュメントが不足しているようです。
MapReduceが適切な方法ですが、シャーディングを行っておらず、クエリの結果が10,000レコードを超えない場合は問題ありません。
Moongooseを介して任意のnode-mongodb-native関数にアクセスできるため、次のようになります。
var group = {
key: {},
cond: {item_id: item_id},
reduce: function(doc, out) {
out.count++;
out.total += doc.value;
},
initial: {
total: 0,
count: 0
},
finalize: function(out) {
out.avg = out.total / out.count;
}
};
Item.collection.group(group.key, group.cond, group.initial, group.reduce, group.finalize, true, function(err, results) {
console.log('group results %j', results);
});
node-mongodb-ネイティブソース: https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js#L1165
MongoDBグループドキュメント: http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Group
mongooseを使用してグループ化しようとしている場合は、これを確認することをお勧めします node.js/express routeのMongooseグループクエリ
集約はサポートされていますが、グループはマングースによってサポートされていないようです。
私は同様の例で作業しました、これが役立つことを願っています
Register.aggregate(
[
{
$group: {_id: {campaign: "$campaign"}, quantity: {$sum: 1}}
},
{
$limit: 5
},
{
$sort: {date: -1}
}
], function (err, res) {
console.log(res)
});