martes, 18 de marzo de 2014

MongoDB Tips


Actualizar todos los documentos de una colección para agregar un nuevo campo:

db.<COLLECTION>.update({}, {$set: {<NEW_FIELD>:<VALUE>} }, {multi:true})

Renombrar el nombre de una columna/campo

db.<COLLECTION>.update({}, {$rename: {'<OLD_FIELD_NAME>': '<NEW_FIELD_NAME>'}}, false, true);

Exportar/Importar una colección

mongoexport -d <DATABASE> -c <COLLECTION> -o <FILE_PATH>
mongoimport -d <DATABASE> -c <COLLECTION> --file <FILE_PATH>

Remover una columna/atributo en todos los documentos de la colección

db.<COLLECTION>.update({}, {$unset: {<FIELD>:""} }, {multi:true})

Consultar todos los documentos donde un arreglo tiene tamaño mayor a 0

db.<COLLECTION>.find({ $where: "this.FIELD.length > 1" } )

Consultar por tamaño de un arreglo mayor a n

db.getCollection(<COLLECTION>).find({ $where: "this.<ARRAY_FIELD>.length > 8" })

viernes, 14 de marzo de 2014

Log4j: Tips

Cambiar el nivel de log para un paquete o clase 

En el log4j.properties:

log4j.rootLogger=INFO,Stdout
log4j.logger....=DEBUG

SLF4J: Multiple bindings were found on the class path logback

En el proyecto que estoy trabajando utilizamos SLF4J como framework de logging. Estaba teniendo un problema en el cual mis llamados para registrar entradas en el log no estaban apareciendo. Al principio pensé que era un problema con el archivo de log4j ya que esta era la implentación final que se estaba utilizando. Sin embargo luego me dí cuenta de unos mensajes apareciendo al principio del arranque de la aplicación:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/atg-dev/.m2/repository/ch/qos/logback/logback-classic/0.9.28/logback-classic-0.9.28.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/atg-dev/.m2/repository/org/slf4j/slf4j-log4j12/1.6.2/slf4j-log4j12-1.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
2014-03-13 21:30:46.718:INFO:/search-indexer:Initializing Spring root WebApplicationContext


Los mensajes estaban indicando que habían varios bindings, es decir, varias implementaciones de logging dentro del classpath. En específico pude ver que aparte de Log4j estaba LogBack, el cual no encontré ninguna referencia en el pom.xml. Había que descubrir la dependencia indirecta/transitiva.

La mejor manera para hallar la dependencia transitiva fue una idea de un compañero de utilizar el plugin de Maven en Eclipse que permite ver la jerarquía de dependencias.



De esa manera pude ubicar la dependencia que incluía al logback y agregar la exclusión:



        <dependency>
            <groupId>com.xxx.content</groupId>
            <artifactId>content-dao-jar</artifactId>
            <version>xx.xx.x.x</version>
            <exclusions>                
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

martes, 11 de marzo de 2014

Git: Lista de comandos útiles

Revertir cambios locales del branch al contenido remoto

git reset --hard origin/<branch>

Fusionar branch2 en branch1

git checkout branch1
git merge branch2

Enviar un branch local al servidor remoto

git push origin branc

Mostrar branches locales

git branch

Borrar branch remoto

git push origin --delete branchname

Borrar branch local

git branch -D the_local_branch