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); |
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})
}}) |
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
}
})
}},{}) |
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)
}
) |
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(
...
} |
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"}) |
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) |
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.