cari

Rumah  >  Soal Jawab  >  teks badan

mongodb数组查询

{
    'a': 1, 
    'b':2, 
    'c': 3, 
    'd': [
        {'e': 4, 'f': 5, 'g': 6}, 
        {'e': 0, 'f': '', 'g': 3},
        {'e': 1, 'f': '', 'g': 3},
    ]
}
{
    'a': 1, 
    'b':2, 
    'c': 3, 
    'd': [
        {'e': 4, 'f': '', 'g': 6}, 
        {'e': 0, 'f': '', 'g': 3},
        {'e': 1, 'f': '', 'g': 3},
    ]
} 

这样的记录,问题是怎么获取d数组中f都为空的文档(如上的结果是文档2)?谢谢

伊谢尔伦伊谢尔伦2797 hari yang lalu532

membalas semua(2)saya akan balas

  • 大家讲道理

    大家讲道理2017-04-24 09:13:43

     Saya hanya tahu cara mencapai ini menggunakan $where, saya belum tahu tentang kaedah lain lagi.

    注意

    Jika ia adalah pertanyaan yang kerap, sangat tidak disyorkan untuk menggunakan $where Ia akan merentasi semua dokumen, dan setiap dokumen akan ditukar daripada BSON menjadi objek JavaScript, dan kemudian diproses melalui ungkapan, iaitu. lebih perlahan daripada pertanyaan biasa Hanya digunakan apabila terdesak. Gunakan pertanyaan biasa untuk menapis dahulu, dan kemudian gunakan $where Gabungan ini boleh mengurangkan kehilangan prestasi. Jika boleh untuk menapis menggunakan indeks dahulu, $where hanya digunakan untuk menapis lagi hasil.
    ——————————————————————————————Dipetik daripada "Panduan Berwibawa untuk Mongodb (E2)"

    Kod:

    db.collection.find({"$where":function(){
        var d = this.d, i = 0, j = d.length;
        for(i,j;i<j;i++){
            if(d[i].f != "")return false;
        };
        return true;
    }});
    

    balas
    0
  • PHP中文网

    PHP中文网2017-04-24 09:13:43

    db.demo.find({d: {$not:{$elemMatch: {f: {$ne: ""}}}}})
    

    Mengujinya pada cangkang mongo:

    > db.demo.insert({
    ...     'a': 1,
    ...     'b':2,
    ...     'c': 3,
    ...     'd': [
    ...         {'e': 4, 'f': '', 'g': 6},
    ...         {'e': 0, 'f': '', 'g': 3},
    ...         {'e': 1, 'f': '', 'g': 3},
    ...     ]
    ... } )
    WriteResult({ "nInserted" : 1 })
    > db.demo.insert({
    ...     'a': 1,
    ...     'b':2,
    ...     'c': 3,
    ...     'd': [
    ...         {'e': 4, 'f': 5, 'g': 6},
    ...         {'e': 0, 'f': '', 'g': 3},
    ...         {'e': 1, 'f': '', 'g': 3},
    ...     ]
    ... }
    ... )
    WriteResult({ "nInserted" : 1 })
    > db.demo.find({d: {$not:{$elemMatch: {f: {$ne: ""}}}}})
    { "_id" : ObjectId("54129ff745d4261bacca6dcd"), "a" : 1, "b" : 2, "c" : 3, "d" : [ { "e" : 4, "f" : "", "g" : 6 }, { "e" : 0, "f" : "", "g" : 3 }, { "e" : 1, "f" : "", "g" : 3 } ] }
    

    balas
    0
  • Batalbalas