埋め込まれたドキュメントのマンゴイド集約法?
-
28-10-2019 - |
質問
集約、min、max、sumを実行するにはどうすればよいですか と友達 埋め込まれたドキュメントに?
例えば:
地区が持っているすべてのイベントの平均コストを取得し、そこにはかなり深く埋め込まれています。
District.schools.all.events.all.costs.avg(:value)
明らかに機能しません。
District.avg('schools.events.costs.value')
それもしません。このエラーメッセージが表示されます。
Mongo::OperationFailure: Database command 'group' failed: (errmsg: 'exception: reduce
invoke failed: JS Error: TypeError: obj.schools
has no properties reduce setup:1'; code: '9010'; ok: '0.0').
それで、それは可能ですか、それとも自分のマップ/機能を削減する必要がありますか?
解決
はい、MapReduceは機能します。カーソルを使用してクエリ結果を処理することもできます。お気に入り:
min = 99999999;
max = -99999999;
sum = 0;
count = 0
db.School.find({}).forEach(function(s) {
if (s.first.events.first.cost < min)
min = s.first.events.first.cost;
if (s.first.events.first.cost > max)
max = s.first.events.first.cost;
sum += s.first.events.first.cost;
++count;
});
これで、MinとMaxが搭載され、合計とカウントから平均と平均を計算できます。
MongoDBには、クエリ言語の集計関数を直接計算する機能がありません。実際には、クエリによって返される結果の数をカウントするcount()関数があり、グループ()関数があるため、そのステートメントは完全に真実ではありません。ただし、グループ関数はMapReduceによく似ており、シャードデータベースでは使用できません。グループ機能に興味がある場合は、次のことを参照してください。 http://www.mongodb.org/display/docs/aggregation#aggregation-group
所属していません StackOverflow