MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB Find Exact Array Match mais l'ordre n'a pas d'importance

La réponse actuellement acceptée ne garantit PAS une correspondance exacte sur votre tableau, juste que la taille est identique et que le tableau partage au moins un élément avec le tableau de requête.

Par exemple, la requête

db.coll.find({ "hobbies": { "$size" : 2, "$in": [ "2", "1", "5", "hamburger" ] }  });

renverrait toujours l'utilisateur kaushik dans ce cas.

Ce que vous devez faire pour une correspondance exacte est de combiner $size avec $all , comme ceci :

db.coll.find({ "hobbies": { "$size" : 2, "$all": [ "2", "1" ] }  });

Mais sachez que cela peut être une opération très coûteuse, en fonction de la quantité et de la structure de vos données. Étant donné que MongoDB maintient l'ordre des tableaux insérés stable, vous feriez peut-être mieux de vous assurer que les tableaux sont dans un ordre trié lors de l'insertion dans la base de données, afin que vous puissiez vous fier à un ordre statique lors de la requête.