recherche

Maison  >  Questions et réponses  >  le corps du texte

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)?谢谢

伊谢尔伦伊谢尔伦2883 Il y a quelques jours571

répondre à tous(2)je répondrai

  • 大家讲道理

    大家讲道理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 de BSON 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;
    }});
    

    répondre
    0
  • PHP中文网

    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 } ] }
    

    répondre
    0
  • Annulerrépondre