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);