121 votos

Cómo comprobar si una matriz campo contiene un valor único o de otra matriz en MongoDB?

Estoy usando mongodb ahora.

He publicación del blog de la colección, y blogpost tiene una de las etiquetas presentadas que es una matriz, por ejemplo,

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

¿Cómo puedo hacer estas búsquedas

  1. contiene 'tag1'
  2. contiene los [tag1','tag2'],
  3. contiene cualquiera de los [tag3', 'tag4']

201voto

Jeff the Bear Puntos 3200

Intenta esto:

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

4voto

heinob Puntos 2081

Mi experiencia es que para (2) la siguiente solución es mucho más rápida que la de uno con "$all":

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

pero para ser honesto, yo no se por qué. Yo estaría interesado, si alguien sabe.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X