update tutorial hacer español ejemplos consultas comandos clausula busquedas avanzadas mongodb

hacer - mongodb tutorial español



MongoDB: encuentra el subdocumento en los parámetros de coincidencia de matrices (2)

Desea usar $elemMatch .

db.foo.findOne({ data: { $elemMatch : { start: { $lte: 5 }, end: { $gte: 5 } }} })

En MongoDB me gustaría encontrar un documento basado en los valores de un subdocumento que cumpla ciertos parámetros. Específicamente, tengo un documento estructurado así:

{ name: "test", data: [{ name: "test1", start: 0, end: 2 }, { name: "test2", start: 15 end: 18 }] }

¿Cómo puedo decirle a MongoDB que solo devuelva mi documento si la hora de inicio para un subdocumento de datos es menor que 5 y el tiempo de finalización para el mismo subdocumento es mayor que 5? Actualmente, si lo hago

db.foo.findOne({ ''data.start'': { $lte: 5 }, ''data.end'': { $gte: 5 } })

devolverá mi documento siempre porque 5 es mayor que 0 y menor que 18. ¿Cómo puedo decirle a MongoDB que solo devuelva mi documento si 5 (o cualquier valor) es mayor que 0 y menor que 2 O mayor que 15 y menor que 18 ?


Llegué a este post pensando en hacer trampa en el código que no estaba allí;) Así que pensé en compartir el fragmento de código en Java usando spring-data-mongodb

Mongo mongo = new Mongo("localhost", 27017); MongoTemplate mongoTemplate = new MongoTemplate(mongo, "db"); Query query = new Query(); query.addCriteria(Criteria.where("data").elemMatch( Criteria.where("start").lte(5) .andOperator(Criteria.where("end").gte(5)))); Foo foo = mongoTemplate.findOne(query, Foo.class);