MongoDB – Consultas Útiles

Ahora que Qbit tiene la oportunidad de participar en un nuevo proyecto utilizando MongoDB me permito crear este post citando algunas sentencias útiles e interesantes

Consultar el tamaño máximo de un documento dentro de una colección

var maxSize = 0;
 
db.MyCollection.find().forEach(function(mc) {
 
    var size= Object.bsonsize(mc); 
 
    if(maxSize < size) {
        maxSize  = size;
    } 
})
 
print(maxSize);

Realizar una búsqueda en una colección cuyos idendificadores se encuentran en otra colección

db.MiColeccion1.find({_id:{$in:
    db.MiColeccion2.find({},{_id:1}).map(function(mc2){return mc2._id})
    }})

Realizar una búsqueda compuesta en una colección cuyos idendificadores se encuentran en otra colección

db.Coleccion1.find({
     "_id":
        {$in: 
            db.Coleccion2.find({},{_id:0,campo1:1,campo2:1,campo3:1}).map(
                function(mc2){
                    return {
                            "campo1" : mc2.campo1,
                            "campo2" : mc2.campo2,
                            "campo3" : mc2.campo3
                    }                
                })        
    }},{})

¿Snapshot?

pase un buen rato tratando de identificar porque MongoDb no me estaba actualizando correctamente la información cuando abría un cursor de la misma colección que estaba consultando, bueno la respuesta es utilizar la función Snapshop antes del forEach

db.MiColeccion1.find().snapshot().forEach(
  function(c){
    c.miDato = "nuevoDato"
    db.MiColeccion1.save(c)
  }
)

¡¿TimeOut?!

Si se tiene que hacer un recorrido largo para un cursor, se puede utilizar la siguiente opción para que no expire el tiempo de respuesta (más referencias a MongoDb Cursor Option)

db.MiColeccion1.find().addOption(DBQuery.Option.noTimeout).forEach(
 ...
}

Where 😛

Ahora me tope con un where (para los fanáticos de SQL)

db.MiColeccion1.find({$where : "this.MiArray.length == 0"})

Campos… ¿existen?

Muestro algunas maneras de validar y desplegar las propiedades que tienen un JSON

var persona = {nombre: "miguel", apellido: "salinas"}
 
if("nombre" in persona ) print("hola")    
if(persona.hasOwnProperty("nombre")) print("adios")
 
var campo
for (campo in persona)
    print(campo)

Analista/Desarrollador y cofundador de QBit Mexhico. Tecnologías utilizadas Android, Java (EJB, Servlets, Faces, Groovy & Grails, Maven, Swing), .Net (C#, VB, ASP, MVC), Delphi, Spring, Hibernate, DTSx, Oracle, T-SQL, Firebird, MySQL, MongoDB, NodeJs, ReactJs (Flux). Sistemas Operativos Mac, Ubuntu y Windows.

Twitter LinkedIn 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *