Requête MongoDB pour correspondre dans le premier article d'un tableau

je suis conscient de l' $in opérateur, qui semble rechercher la présence d'un élément dans array, mais je ne veux trouver une correspondance que si l'élément est en première position dans un array.

Par exemple:

{
    "_id" : ObjectId("0"),
    "imgs" : [
        "http://foo.jpg",
        "http://bar.jpg",
        "http://moo.jpg",
        ]
},
{
    "_id" : ObjectId("1"),
    "imgs" : [
        "http://bar.jpg",
        "http://foo.jpg",
        "http://moo.jpg",
        ]
}

je cherche une requête semblable à:

db.products.find({"imgs[0]": "http://foo.jpg"})

Ce serait/doit retourner l' ObjectId("0") mais pas ObjectId("1"), car il ne vérifie que la première image dans le tableau.

Comment cela peut-il être atteint? Je suis conscient que je pourrais juste créer un champ distinct qui contient une chaîne de caractères firstImg mais ce n'est pas vraiment ce que je cherche ici.

31
demandé sur JVG 2013-11-11 09:15:17

2 réponses

je crois que vous voulez imgs.0. par exemple, si vous donnez votre exemple de document, vous voulez dire:db.products.find({"imgs.0": "http://foo.jpg"})

soyez conscient que référencer les index des tableaux ne fonctionne que pour le premier niveau du tableau. Mongo ne supporte pas les index de recherche de tableaux plus profonds.

59
répondu poundifdef 2013-11-11 05:19:06

vous pouvez utiliser la notation par points pour les index des tableaux:

db.products.find({"imgs.0": "http://foo.jpg"})
point.

MongoDB utilise la notation par points pour accéder aux éléments d'un tableau et l'accès aux champs d'un sous-document.

pour accéder à un élément d'un tableau par la position de l'index à base zéro, concaténez le nom du tableau avec le point (.) et d'index de base zéro de la position, et de les placer dans des guillemets:

'<array>.<index>'

en outre, voici un lien vers leDocumentation des tableaux.

9
répondu Lix 2013-11-11 05:20:56