コレクション内の他のドキュメントと比較して、1 つのドキュメントの一致スコアを計算しようとしています。mapReduce で動作しますが、aggregate を使用してこれが可能かどうかを知りたかった (10 倍高速と言われています)。
私のドキュメントは次のとおりです。
{
name: "John",
age: 27,
track: {
section: 12,
start: 1,
end: 4
}
}
私が計算しようとしているスコアは単純ですmin(start_track_1, start_track_2) - max(stop_track_1, stop_track_2)
ジョンのスコアを計算するために、パイプラインを作成しようとしましたが、2 番目の演算子で既に失敗しています。
db.test.aggregate(
{ $match: {
'age' : {$gte: 22, $lte: 34},
'track.section': 12,
}
},
{ $project: {
_id : 1,
name : 1,
min_end: {$min: ["$track.end", 4]},
max_start: {$max: ["$track.start", 1]}
}
}
)
シェルは次のように答えます。"errmsg" : "exception: invalid operator '$min'"
問題は、$min および $max 演算子が、$add および $subtract と同じように、配列に対して機能したことです...
だから今私は立ち往生しています。$group で使用される $min と $max は、ここでは役に立たないと思います...
何か案が ?