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

Evaluasi elemen array secara kondisional untuk dikembalikan

Berikut adalah contoh menggunakan Kerangka Agregasi di MongoDB 2.4.9 yang menurut saya mencapai hasil yang Anda inginkan:

db.books.aggregate(

    // Unwind the refs array
    { $unwind: "$refs" },

    // Sort by refs.default descending so "true" values will be first, nulls last
    { $sort: {
        "refs.default" : -1
    }},

    // Group and take the first ref; should either be "default:true" or first element
    { $group: {
        _id: "$_id",
        name: { $addToSet: "$name" },
        refs: { $first: "$refs" }
    }},

    // (optional) Sort by name to match the example output
    { $sort: {
        name: 1,
    }},

    // (optional) Clean up output
    { $project: {
        _id: 0,
        name: 1,
        refs: 1
    }}
)

Contoh hasil:

{
    "result" : [
        {
            "name" : [
                "Book1"
            ],
            "refs" : {
                "oid" : "object5",
                "default" : true
            }
        },
        {
            "name" : [
                "Book2"
            ],
            "refs" : {
                "oid" : "object5",
                "default" : true
            }
        },
        {
            "name" : [
                "Book3"
            ],
            "refs" : {
                "oid" : "object4"
            }
        },
        {
            "name" : [
                "Book4"
            ],
            "refs" : {
                "oid" : "object4",
                "default" : true
            }
        }
    ],
    "ok" : 1
}

Catatan:

  • Ini membuat asumsi tentang perilaku urutan pengurutan untuk refs di mana "default:true" tidak ada. Pada pengujian singkat, urutan asli tampaknya dipertahankan, sehingga elemen "pertama" dari larik seperti yang diharapkan.

  • Karena operator agregasi yang digunakan, output name adalah larik elemen tunggal, dan refs menjadi objek yang disematkan. Daripada memanipulasi lebih jauh dalam Kerangka Agregasi, Anda bisa merujuk kolom yang benar dalam kode aplikasi Anda.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. RDD dari BSONObject ke DataFrame

  2. Masalah Django MongoDB

  3. Jumlah Agregasi MongoDB pada Objek dalam Array

  4. Permintaan MongoDB untuk mengembalikan hanya dokumen yang disematkan

  5. Pemberitahuan MongoDB dengan Python