Estoy usando mongodb ahora.

He publicación del blog de la colección, y blogpost tiene 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 [‘tag1′,’tag2’],
  3. contiene cualquiera de [‘tag3’, ‘tag4’]

2 Comentarios

  1. 218

    Intenta esto:

    db.blogpost.find({ 'tags' : 'tag1'}); //1
    db.blogpost.find({ 'tags' : { $all : [ 'tag1', 'tag2' ] }}); //2
    db.blogpost.find({ 'tags' : { $in : [ 'tag3', 'tag4' ] }}); //3
    • Esto está bien documentado en la ayuda: mongodb.org/display/DOCS/…
    • para el $todos significa todos los elementos Y en la expresada orden, o es que sólo desordenada ?
    • Yo no veo que se menciona que el campo que usted está usando como la búsqueda puede ser una matriz, y la forma en que es manejada». campo : { $en : array }». ¿Qué sucede cuando usted busca para una matriz dentro de una matriz de matrices? No se especifica.
    • Es allí cualquier INDEXACIÓN que podemos hacer en la matriz de dejar de duplicar? Si sí, por favor guía de cómo.
    • el Oso: ¿Puede por favor proporcionar el equivalente de código Java? Estoy teniendo grandes dificultades en conseguir el Java equivalentes de estas Consultas a MongoDB.
    • has probado a utilizar la Primavera de Datos MongoDB?
    • su desordenada como por escrito en la documentación: $todo operador DOCS. Acabo de leer el ejemplo, en la parte y verás.
    • el Oso: db.blogpost.find({ ‘etiquetas’ : { $en : [ /tag/ ] }}); en la anterior consulta, estoy tratando de coincidir con regex exp,cuando estoy tratando de la misma usando node js,la variable ‘tag’ es la creación de la consulta como esta a continuación: db.blogpost.find({ ‘etiquetas’ : { $en : [ /’78438’/ ] }}); por eso no es de trabajo, pero cuando me quite las comillas que rodean el valor de las obras,así como resolver este problema

  2. 5

    Mi experiencia es que para (2) la siguiente solución es mucho más rápido que el que está 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.

    • Por el camino, solo probado en las palabras clave indexadas lista. Absolutamente el mismo resultado con $y y $todos
    • Tal vez la que ha cambiado con las nuevas versiones en el ínterin.
    • Es circunstancial. Para el «$y», mongodb hacer una operación lógica «y» la operación. Por lo tanto, si la primera expresión es falsa, la segunda no son tomados en consideración. Esto significa que menos de procesamiento.
    • Pero lo que debería suceder con ‘$todos » también, ¿no es!?
    • $todos es, probablemente, dos de las búsquedas en un índice, $y es probablemente una búsqueda con un recorrido secuencial en el resultado.

Dejar respuesta

Please enter your comment!
Please enter your name here