Secara umum:jika Anda mencari tanpa urutan pengurutan yang ditentukan, tidak ada jaminan urutan hasil.
Selain itu, tidak mungkin untuk mengurutkan berdasarkan array (bahkan lebih sedikit lagi jika Anda ingin mengurutkan array berdasarkan array seperti yang dijelaskan). A sort() menggunakan perbandingan logis untuk menentukan urutan naik atau turun berdasarkan bidang dalam dokumen hasil Anda.
Anda harus menerapkan logika penyortiran khusus yang diinginkan dalam kode aplikasi Anda sendiri.
Pendekatan yang berguna mungkin dengan memanfaatkan Kerangka Kerja Agregasi yang baru di MongoDB 2.2 .. khususnya, kemampuan untuk $unwind array ke dalam aliran dokumen.
Misalnya, menyiapkan data pengujian sebagai:
{ "_id" : ObjectId("504ac93fb50571321b2f932a"), "a" : [ 1, 2, 4 ] }
{ "_id" : ObjectId("504ac946b50571321b2f932b"), "a" : [ 5, 4, 9 ] }
{ "_id" : ObjectId("504ac94eb50571321b2f932c"), "a" : [ 2, 1, 3 ] }
{ "_id" : ObjectId("504ac954b50571321b2f932d"), "a" : [ 7, 3, 9 ] }
Sebuah $in
pencarian di [2,3] akan menghasilkan dokumen yang cocok:
> db.matches.find({'a': { $in: [2,3]}})
{ "_id" : ObjectId("504ac93fb50571321b2f932a"), "a" : [ 1, 2, 4 ] }
{ "_id" : ObjectId("504ac94eb50571321b2f932c"), "a" : [ 2, 1, 3 ] }
{ "_id" : ObjectId("504ac954b50571321b2f932d"), "a" : [ 7, 3, 9 ] }
Dengan kerangka kerja agregasi, Anda dapat $match
dokumen yang sama dan kemudian memanipulasi hasilnya untuk mencapai beberapa pengurutan dasar:$unwind
array, $sort
mereka, lalu $group
ini kembali menjadi hasil:
db.matches.aggregate(
{ $match : {
a: { $in: [2,3] }
}},
{ $unwind : "$a" },
{ $sort: {
"a": -1
}},
{ $group : {
_id: '$_id',
a: { $addToSet: "$a" }
}}
)
Jadi dalam contoh ini, dokumen dengan larik yang cocok sekarang diurutkan dalam urutan menaik untuk nilai larik:
{
"result" : [
{
"_id" : ObjectId("504ac94eb50571321b2f932c"),
"a" : [ 1, 2, 3]
},
{
"_id" : ObjectId("504ac93fb50571321b2f932a"),
"a" : [ 1, 2, 4 ]
},
{
"_id" : ObjectId("504ac954b50571321b2f932d"),
"a" : [ 3, 7, 9 ]
}
],
"ok" : 1
}