Maison > Questions et réponses > le corps du texte
{
'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
Je ne sais comment y parvenir qu'en utilisant $where
, je ne connais pas encore d'autres méthodes.
注意
S'il s'agit d'une requête fréquente, il est fortement déconseillé d'utiliser
$where
Elle traversera tous les documents, et chaque document sera converti deBSON
en un objet JavaScript, puis traité via des expressions, ce qui est beaucoup plus lent que les requêtes régulières. Utilisé uniquement en cas de désespoir. Utilisez d'abord des requêtes régulières pour filtrer, puis utilisez$where
. Cette combinaison peut réduire la perte de performances. S'il est possible de filtrer d'abord en utilisant l'index,$where
n'est utilisé que pour filtrer davantage les résultats.
——————————————————————————————Extrait de "Le guide faisant autorité sur Mongodb (E2)"
Code :
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: ""}}}}})
Je l'ai testé sur une coque 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 } ] }