145 votes

Comment vérifier si un champ de tableau contient une valeur unique ou un autre tableau dans MongoDB ?

J'utilise maintenant mongodb.

J'ai une collection d'articles de blog, et elle a une tags qui est un tableau, par ex.

blogpost1.tags = ['tag1', 'tag2', 'tag3', 'tag4', 'tag5']
blogpost2.tags = ['tag2', 'tag3']
blogpost3.tags = ['tag2', 'tag3', 'tag4', 'tag5']
blogpost4.tags = ['tag1', 'tag4', 'tag5']

Comment puis-je effectuer ces recherches ?

  1. contient tag1
  2. contient ['tag1','tag2']
  3. contient l'un des éléments suivants ['tag3', 'tag4']

221voto

Jeff the Bear Points 3200

Essayez ceci :

db.blogpost.find({ 'tags' : 'tag1'}); //1
db.blogpost.find({ 'tags' : { $all : [ 'tag1', 'tag2' ] }}); //2
db.blogpost.find({ 'tags' : { $in : [ 'tag3', 'tag4' ] }}); //3

6 votes

Ceci est bien documenté dans l'aide : mongodb.org/display/DOCS/

2 votes

Pour le $all, cela signifie-t-il que tous les éléments ET dans l'ordre exprimé ou est-ce simplement non ordonné ?

2 votes

@ScottHernandez Je ne vois pas qu'ils mentionnent que le champ que vous utilisez comme recherche peut être un tableau, et comment cela est géré. "field : { $in : tableau }". Que se passe-t-il lorsque vous recherchez un tableau dans un tableau de tableaux ? Non spécifié.

5voto

heinob Points 2081

Mon expérience est que pour (2) la solution suivante est beaucoup plus rapide que celle avec "$all" :

db.blogpost.find({ $and: [ {tags: 'tag1'} ,{tags: 'tag2'} ] });

mais pour être honnête, je ne sais pas pourquoi. Je serais intéressé, si quelqu'un le sait.

1 votes

Au fait, je viens de le tester sur la liste des mots-clés indexés. Absolument le même résultat avec $and et $all.

0 votes

Peut-être que cela a changé avec les nouvelles versions entre-temps.

0 votes

C'est circonstanciel. Pour le "$and", mongodb fait une opération logique "and". Donc si la première expression est fausse, la seconde n'est pas prise en compte. Cela signifie moins de traitement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X