Rumah > Soal Jawab > teks badan
{
'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)?谢谢
大家讲道理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 daripadaBSON
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;
}});
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 } ] }