Yah tidak ada banyak detail di sini, tetapi saya dapat memberikan contoh kasus untuk dipertimbangkan. Perhatikan kumpulan dokumen berikut:
{ "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" }
Jadi misalkan Anda ingin gelembung item untuk pengguna "tagihan" dan "ted" ke bagian atas hasil Anda, lalu yang lainnya diurutkan berdasarkan user
dan color
. Yang dapat Anda lakukan adalah menjalankan dokumen melalui $project
tahap secara agregat, sebagai berikut:
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 }}
])
Jadi yang dilakukan adalah menetapkan nilai secara kondisional ke weight
berdasarkan apakah user
dicocokkan dengan salah satu nilai yang diperlukan. Dokumen yang tidak cocok hanya diberi 0
nilai.
Saat kami memindahkan dimodifikasi . ini dokumen ke $sort
fase, weight
baru key dapat digunakan untuk mengurutkan hasil sehingga dokumen "berbobot" berada di atas, dan yang lainnya akan mengikuti.
Ada beberapa hal yang dapat Anda lakukan untuk $project berat dengan cara ini. Lihat referensi operator untuk informasi lebih lanjut:
http://docs.mongodb.org/manual/reference/operator/aggregation/