Creo que la versión ya esta mas o menos para probar así que toca escribir el changelog de las ultimas modificaciones, las hechas desde que lo movimos de codeplex a github.
Casi todas las modificaciones vienen de refactoring o de necesidades que me he ido encontrando al hacer pruebas con una CRS cambiando el SQL por MongoDB, pero cualquier sugerencia es bienvenida.
Los cambios:
- El id pasa a ser Long, era necesario para poderlo definir como autoincremental, además es mas legible.
- Añadidos extension methods de búsqueda (MongoFind) para las Listas de objetos (que hereden de MongoMapper), puedes ver el código aquí y ejemplos aquí
- Posibilidad de guardar en un campo de la clase base el Documento Original en el momento de Deserializar, de esta manera podemos comprobar cambiosy, en un futuro, hacer rollback.
- Al intentar insertar un documento que ya existe posibilidad de lanzar excepción o de modificar el existente.
- Si no se define MongoKey o se le define vacío usa por defecto el id como PK.
- Parada la opción de pasar expresiones para los filtros, vi que la gente del Driver estaba trabajando en algo igual, así que esperare que lo terminen
- Intento tipar un poco los Querys, puedes crear un Query pasándole el campo en una expresión, tipo: MongoQuery.Eq((Country c) => c.Code, “ES”), puedes ver ejemplos aquí.
- Añadidos metodos de búsqueda que devuelven un cursor, ahora existen los FindAsList y los FindAsCursor, así se pueden usar los SetFields, SetLimit, SetSkip etc ..
- Sección de configuración propia en el config de la aplicación, puedes ver este ejemplo.
- Añadidas mas opciones de configuración:
- MaxDocumentSize
- SafeMode
- FSync
- ExceptionOnDuplicateKey
- EnableOriginalObject
- UseIncrementalId
- PoolSize
- WaitQueueTimeout
El tema de usar un id Incremental afecta al rendimiento a la hora de insertar documentos ya que lo que hace es crear una colección donde guarda el ultimo id usado para cada colección y tiene que incrementar en cada insert, puedes ver el código aquí, es configurable el usarlo o no.
Otro tema que afecta al rendimiento es el de guardar el Objeto original, por eso lo puse configurable también, afecta al rendimiento de lectura ya que hace una Serializacion al Deserializar cada documento para guardar una copia en formato JSV, aunque esto no se nota mucho, para Serilizar/Deserializar en el tema del Documento Original utilizo ServiceStack.Text, es lo mas rápido que he encontrado, así que ahora tiene esa dependencia.
En el proyecto de Test puedes ver algunos ejemplos de como usar MongoMapper, agradezco cualquier idea/comentario
https://github.com/emiliotorrens/MongoMapper.NET
.


