MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Urutan hasil di MongoDB dengan $in?

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
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Bagaimana cara memperbarui banyak dokumen dengan satu perintah?

  2. Cara menonaktifkan mongodb tertanam flapdoodle dalam tes tertentu

  3. Mongodb - apakah masalah keandalan masih signifikan?

  4. Waktu koneksi habis setelah memutakhirkan MongoDB.Driver dari 2.7.0 ke 2.7.1

  5. Bagaimana cara mengonversi properti di MongoDB dari teks ke tipe tanggal?