web-dev-qa-db-fra.com

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 correspondent exactement à un ou plusieurs éléments de tableau en utilisant $ in.

Donc, 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 pouvoir rechercher plusieurs combinaisons de tableaux en même temps, par exemple un tableau avec un defindex de 363 et un _particleEffect de 19 ou 6, ce qui signifie que je dois utiliser $ in.

Cependant, lorsque j'essaie de mettre $ elemMatch et $ in dans une requête, elemMatch n'aura rien à voir avec cela car cela ne fonctionnera pas sur un tableau. Je n'ai pas été capable de le faire.

Mes tentatives jusqu'ici:

{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ù j’ai essayé de nombreuses combinaisons avec $ elemmatch et $ and.

(trouve des éléments dans le tableau inhabituel mais ignore la délimitation du tableau IE il retournera un document dans lequel plusieurs éléments seront utilisés pour satisfaire la condition (donc au moins un élément avec un defindex correspondant et un élément ayant le effet.))

J'ai passé une journée et demie là-dessus et je suis vraiment allé très loin, même en trouvant une question qui était presque la même que la mienne, mais il manquait toute mention d'un dollar en partie. -> MongoDB: Associer plusieurs éléments du tableau

tl; dr: existe-t-il un moyen de faire efficacement $ in + $ elemMatch?

Merci de m'avoir lu et de pouvoir lire mon message un peu mal formaté, merci.

12
Digits

Vous pouvez utiliser une syntaxe différente de celle que vous essayez d’obtenir pour obtenir le même résultat mais ne pas rencontrer la limitation de SERVER-3544.

Utilisez cette syntaxe:

db.collection.find({ "unusual": {"$elemMatch":{"defindex":363,"_particleEffect":{"$in":[6,19]}  }} })

Cela correspond à tout document comportant un élément de tableau avec 313 et 6 ou 19.

Cela fonctionne également avec {$in:[]} pour defindex et _particleEffect, tant que vous avez l’intention de faire correspondre toute combinaison des deux listes.

db.collection.find({ "unusual": {"$elemMatch":{"defindex":{"$in":[313,363]},"_particleEffect":{"$in":[6,19]}  }} })
21
Asya Kamsky

https://jira.mongodb.org/browse/SERVER-3544

Welp a fait BEAUCOUP de fouilles et il semblerait que cela réponde à ma question. Vous ne pouvez pas faire $ in $ elemmatch pour le moment.

0
Digits