Si j'ai ce schéma ...
person = {
name : String,
favoriteFoods : Array
}
... où le favoriteFoods
tableau est rempli de chaînes. Comment puis-je trouver toutes les personnes qui ont des «sushis» comme nourriture préférée en utilisant des mangoustes?
J'espérais quelque chose dans le sens de:
PersonModel.find({ favoriteFoods : { $contains : "sushi" }, function(...) {...});
(Je sais qu'il n'y en a pas $contains
dans mongodb, juste expliquer ce que je m'attendais à trouver avant de connaître la solution)
favouriteFoods
:favouriteFoods:[{type:Schema.Types.ObjectId, ref:'Food'}]
PersonModel.find({ favouriteFoods.text: "sushi" }, ...); person = { name : String, favouriteFoods : [{text:String}] }
Il n'y a aucun
$contains
opérateur dans mongodb.Vous pouvez utiliser la réponse de JohnnyHK pendant que cela fonctionne. L'analogie la plus proche de celle que contient mongo est
$in
, en utilisant cela, votre requête ressemblerait à:la source
$in
est utilisé lorsque vous avez plusieurs valeurs de requête et que le document doit correspondre à l'une d'entre elles. Pour l'inverse (sur quoi porte cette question), la réponse de JohnnyHK est correcte. J'allais voter contre, mais je suppose que cette réponse peut être utile à d'autres personnes qui se retrouvent sur cette page.PersonModel.find({favouriteFoods: {"$in": ["sushi", "hotdog"]}})
Je pense que ce
$all
serait plus approprié dans cette situation. Si vous cherchez une personne qui aime les sushis, vous faites:Comme vous voudrez peut-être filtrer davantage votre recherche, comme ceci:
$in
est comme OU et$all
comme ET. Vérifiez ceci: https://docs.mongodb.com/manual/reference/operator/query/all/la source
Dans le cas où le tableau contient des objets, par exemple, if
favouriteFoods
est un tableau d'objets parmi les suivants:vous pouvez utiliser la requête suivante:
la source
Si vous avez besoin de trouver des documents contenant des éléments NULL dans un tableau de sous-documents, j'ai trouvé cette requête qui fonctionne plutôt bien:
Cette requête est tirée de ce post: tableau de requête MongoDb avec des valeurs nulles
C'était une excellente découverte et cela fonctionne beaucoup mieux que ma propre version initiale et incorrecte (qui s'est avérée fonctionner correctement uniquement pour les tableaux avec un élément):
la source
Bien que d'accord avec find () est le plus efficace dans votre cas d'utilisation. Il existe toujours $ match du cadre d'agrégation, pour faciliter la requête d'un grand nombre d'entrées et générer un faible nombre de résultats qui vous tiennent particulièrement à cœur pour le regroupement et la création de nouveaux fichiers.
la source
L'incase de lookup_food_array est un tableau.
L'incase de lookup_food_array est une chaîne.
la source
Pour Loopback3, tous les exemples donnés n'ont pas fonctionné pour moi, ni aussi rapidement que l'utilisation de l'API REST. Mais cela m'a aidé à trouver la réponse exacte dont j'avais besoin.
{"where":{"arrayAttribute":{ "all" :[String]}}}
la source
Si vous souhaitez utiliser quelque chose comme un opérateur "contient" via javascript, vous pouvez toujours utiliser une expression régulière pour cela ...
par exemple. Supposons que vous souhaitiez récupérer un client ayant "Bartolomew" comme nom
la source
Je sais que ce sujet est ancien, mais pour les futures personnes qui pourraient se poser la même question, une autre solution incroyablement inefficace pourrait être de faire:
Cela évite toutes les optimisations par MongoDB donc ne pas utiliser dans le code de production.
la source