Pertanyaan Memeriksa Keberadaan Daftar Tersarang di Mongo


Saya memiliki dokumen dalam bahasa Mongo yang disusun dengan cara berikut:

{ 
    "_id" : ObjectId("4eea7237d0ba3a04f20008fb"), 
    "code" : "b2677c2809c844cc9d7e3e4ff8d95b46", 
    "city_id" : 4, 
    "datetime" : ISODate("2011-12-13T18:41:44.062Z"), 
    "plays" : [     
        {   
          "play_id" : 717224,   
          "clicks" : [ ],   
          "order" : 1,  
          "mysql_id" : 145
        }

Saya ingin mengajukan kueri untuk dokumen yang memiliki atribut plays.clicks adalah daftar yang tidak kosong. Saya sudah mencoba ada dengan tidak berhasil. Saya berpikir bahwa hal seperti ini mungkin berhasil:

 db.collection.find({plays.clicks.0: {$exists:true}})

Tetapi saya yakin ini hanya akan mengembalikan dokumen yang elemen pertamanya dalam larik drama berisi daftar klik yang tidak kosong.

Setiap pemikiran tentang bagaimana saya bisa menyelesaikan ini?

Terima kasih


7
2017-12-20 23:10


asal


Jawaban:


db.collection.find({plays.clicks.0: {$exists:true}})

adalah sintaks yang benar, namun sebagai plays adalah daftar kueri yang akan cocok dokumen apa saja yang memiliki klik plays. Tidak ada cara untuk mengambil subkumpulan Array untuk subkemen dengan cara ini [1]. Ada tiket untuk sub / koleksi virtual [2]

[1] http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields#RetrievingaSubsetofFields-RetrievingaSubrangeofArrayElements

[2] https://jira.mongodb.org/browse/SERVER-828


8
2017-12-21 15:11



Simpan ukuran daftar sebagai atribut terpisah (mis. num_plays). Kemudian Anda dapat meminta dokumen di mana num_plays lebih besar dari 0:


3
2017-12-20 23:16



Belum diuji, tapi saya rasa pertanyaan yang Anda inginkan adalah

{ "plays.clicks" : { "$size" : 0 } }

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size


0
2017-12-21 00:07