mongodb $ elemMatch $ in
Donc, j'ai une base de données avec une charge de tableaux dans les documents. Je veux trouver des documents entiers où mes requêtes sont une correspondance exacte pour un ou plusieurs éléments de tableau utilisant $in.
Donc, la structure du document:
{
"_id" : "76561198045636214",
"timecreated" : 1311148549,
"unusual" : [
{
"id" : 1960169991,
"original_id" : 698672623,
"defindex" : 313,
"_particleEffect" : 19
},
{
"id" : 965349033,
"original_id" : 931933064,
"defindex" : 363,
"_particleEffect" : 6
}
]
}
j'ai beaucoup de documents comme celui-ci, je veux trouver où un document a un tableau contenant à la fois un defindex 313 et un _particleEffect 19 dans une entrée de tableau ce qui signifie que je devrais utiliser $elemMatch.
je veux aussi être en mesure de rechercher pour de nombreuses combinaisons de tableaux à la fois donc par exemple un tableau avec un defindex de 363 et un _particleeffet de 19 ou 6 ce qui signifie que je dois utiliser $in.
cependant quand j'essaie de mettre $elemMatch et $in dans une requête, elemMatch n'a rien à voir avec cela car il ne fonctionnera pas sur un tableau. Je n'ai pas été capable de le faire.
Mes tentatives jusqu'à présent:
{unusual:{$all:[{"defindex":{"$in":[361,378]}},{"_particleEffect":{"$in":[30,0]}}]}}
(ma dernière tentative, ne fonctionne tout simplement pas.)
{"$and":[{"unusual.defindex":{"$in":[361,378]}},{"unusual._particleEffect":{"$in":[[30,36]]}}]}
et beaucoup d'autres où je j'ai essayé plein de combinaisons avec $elemmatch et $and.
(trouve des éléments dans le tableau unusual mais ignore la délimitation du tableau, C'est-à-dire qu'il retournera un document où plusieurs éléments seront utilisés pour satisfaire la condition (donc au moins un élément avec un defindex qui correspond et un élément qui a l'effet.))
j'ai passé un jour et demi sur ce sujet et je suis allé vraiment loin, même en trouvant une question qui était presque la même que la mienne mais qui manquait toute mention d'un $en partie. -> MongoDB: Correspondre à plusieurs éléments de tableau
tl; dr: existe-t-il un moyen efficace de faire $in + $elemMatch?
Merci d'avoir lu et d'être capable de lire mon article quelque peu mal formaté, merci.
3 réponses
vous pouvez utiliser une syntaxe différente de celle que vous essayez qui permet d'obtenir le même résultat mais qui n'atteint pas la limitation dans SERVER-3544.
Utilisez cette syntaxe:
db.collection.find({ "unusual": {"$elemMatch":{"defindex":363,"_particleEffect":{"$in":[6,19]} }} })
ceci correspondra à n'importe quel document qui a un élément de tableau avec à la fois 313 et 6 ou 19.
cela fonctionne aussi avec {$in:[]}
pour defindex et _particleEffect, aussi longtemps que vous avez l'intention de faire correspondre n'importe quelle combinaison des deux listes.
db.collection.find({ "unusual": {"$elemMatch":{"defindex":{"$in":[313,363]},"_particleEffect":{"$in":[6,19]} }} })
https://jira.mongodb.org/browse/SERVER-3544
Welp, a fait BEAUCOUP de creuser et ça ressemble à ça répond à ma question. Vous ne pouvez pas faire $in $elemmatch pour le moment.
essaie Juste de faire ceci (Testé)
{
"unusual": {
$all:[{
$elemMatch:{"defindex":313},
$elemMatch:{"_particleEffect":6}
}]
}
}