Tengo una colección donde el documento tiene el siguiente aspecto:

/* 0 */

{
    "_id" : ObjectId("5320b1c723bc746084fa7107"),
    "channels" : [ 
        3, 
        4
    ]
}


/* 1 */

{
    "_id" : ObjectId("5320b1c723bc746084fa7107"),
    "channels" : [ ]
}

Quiero formar una consulta que quiero que todos los documentos donde los canales de distribución tiene algún valor y no está vacío.

He intentado esto:

db.event_copy.find({"channels":{$exists:true}})

Pero que todavía va a volver a mí los documentos con valores no en el canal.

InformationsquelleAutor Pi Horse | 2014-03-13

3 Comentarios

  1. 14

    Usted necesita el $tamaño operador. Para encontrar algo con no elementos hacen las siguientes

    db.collection.find({ channels: {$size: 0} })

    Si usted sabe que tiene un tamaño fijo, a continuación, hacer que

    db.collection.find({ channels: {$size: 2} })

    Inversa de lo contrario que con $no

    db.collection.find({ channels: {$not:{$size: 0}} })

    Y se puede combinar con $y:

    db.collection.find({ $and: [ 
        { channels: {$not:{$size: 0}} },
        { channels: {$exists: true } }
    ]})
    • Sí, yo sólo traté de $tamaño del operador. El problema es que quiero que todos los documentos que tengan algún valor en ella. Yo no se cómo muchos de los valores que podría estar dentro de ella. Básicamente no sé el tamaño. He intentado utilizar la $gte con $tamaño y no parece funcionar
    • Usted no puede hacer rangos pero no es una condición para que. Ver editar.
    • Por alguna razón que la consulta no me da los resultados correctos. También devuelve los documentos que no tienen los canales propio campo.
    • Usted necesita especificar cosas como que cuando usted haga sus preguntas. Ver la edición de nuevo.
    • Que iba a funcionar bien. Pero mira la respuesta que he publicado. Que parece ser como una más simple solución. No estoy seguro de que el rendimiento de la consulta, aunque.
    • la notación de punto de método está muy bien y es la primera cosa que viene a la mente cuando algunos documentos que pueden incluso no tener el campo.

  2. 1

    Compruebe el tamaño del operador aquí

    db.event_copy.find( { channels: { $size: 0 } } );
    • Sí, yo sólo traté de $tamaño del operador. El problema es que quiero que todos los documentos que tengan algún valor en ella. Yo no se cómo muchos de los valores que podría estar dentro de ella. Básicamente no sé el tamaño. He intentado utilizar la $gte con $tamaño y no parece funcionar
  3. 1

    Me hizo uso de este :

    db.event_copy.find({'channels.0' : {$exists: true}}).count()
    • no comprueba también si el campo tiene un valor o sólo si el campo existe?

Dejar respuesta

Please enter your comment!
Please enter your name here