これは、一般的な概念として「重み付け」と呼ばれます。したがって、他のメカニズムがない場合は、MongoDBクエリで、「重み」の値をドキュメントに論理的に「投影」することで、これを論理的に処理します。
ドキュメントに存在するフィールドを「投影」して変更する方法は、 .aggregate()
メソッド、具体的には $project
>
パイプラインステージ:
db.collection.aggregate([
{ "$project": {
"getthisfirst": 1,
"weight": {
"$cond": [
{ "$eq": [ "$getthisfirst", "yes" ] },
10,
{ "$cond": [
{ "$eq": [ "$getthisfirst", "maybe" ] },
5,
0
]}
]
}
}},
{ "$sort": { "weight": -1 } }
]);
$cond
ここでの演算子は、"ternary"
です。 (if / then / else)最初の引数がブール値のtrue|false
に到達する条件付きステートメントである条件 。 true
の場合 結果として2番目の引数が返されます。それ以外の場合は、応答として「else」または3番目の引数が返されます。
この「ネストされた」場合、「はい」が一致の場合、特定の「重み」スコアが割り当てられます。それ以外の場合は、次の条件テストに進み、「たぶん」が一致の場合、アノッタースコアが割り当てられます。それ以外の場合、スコアは0
です。 一致する可能性は3つしかないためです。
次に、 $sort
条件は、結果を「重み」が一番上になるように「順序付け」(降順)するために適用されます。