ここでは詳細はあまりありませんが、検討のためにサンプルケースを提供できます。次の一連のドキュメントを検討してください。
{ "user" : "fred", "color" : "black" }
{ "user" : "bill", "color" : "blue" }
{ "user" : "ted", "color" : "red" }
{ "user" : "ted", "color" : "black" }
{ "user" : "fred", "color" : "blue" }
{ "user" : "bill", "color" : "red" }
{ "user" : "bill", "color" : "orange" }
{ "user" : "fred", "color" : "orange" }
{ "user" : "ted", "color" : "orange" }
{ "user" : "ally", "color" : "orange" }
{ "user" : "alice", "color" : "orange" }
{ "user" : "alice", "color" : "red" }
{ "user" : "bill", "color" : "purple" }
したがって、バブルしたいとします。 ユーザーのアイテムは結果の一番上に「請求」および「テッド」され、それ以外はすべてuser
で並べ替えられます とcolor
。できることは、 $project
を介してドキュメントを実行することです。 次のように、全体としてステージングします。
db.bubble.aggregate([
// Project selects the fields to show, and we add a weight value
{$project: {
_id: 0,
"user": 1,
"color": 1,
"weight": {$cond:[
{$or: [
{$eq: ["$user","bill"]},
{$eq: ["$user","ted"]}
]},
1,
0
]}
}},
// Then sort the results with the `weight` first, then `user` and `color`
{$sort: { weight: -1, user: 1, color: 1 }}
])
つまり、条件付きでweight
に値を割り当てます。 user
かどうかに基づく 必要な値の1つに一致しました。一致しないドキュメントには、単に0
が与えられます 価値。
これを変更移動すると $sort
にドキュメントを追加します フェーズ、新しいweight
キーを使用して結果を並べ替えることができるため、「重み付けされた」ドキュメントが一番上に表示され、それ以外のものが続きます。
$project に対してできることはたくさんあります。 このように重み。詳細については、オペレーターリファレンスを参照してください:
http://docs.mongodb.org/manual/reference/operator/aggregation/