sql >> Base de Datos >  >> NoSQL >> MongoDB

Consulta un documento y todos sus subdocumentos que coincidan con una condición en mongodb (usando Spring)

Deberá utilizar MongoTemplate proporcionado en la dependencia de datos de spring mongo. No hay soporte listo para usar para $filter en la versión de lanzamiento actual. Hacer uso de AggressionExpression. Incluya debajo de la proyección en el proyecto. Utilice la versión de datos de Spring Mongo 1.8.5.

Aggregation aggregation = newAggregation(
        match(Criteria.where("_id").is(1)),
        project( "_id", "sensorName", "samplePeriod").and(new AggregationExpression() {
            @Override
            public DBObject toDbObject(AggregationOperationContext aggregationOperationContext) {
                DBObject filter = new BasicDBObject("input", "$data").append("as", "result").append("cond",
                        new BasicDBObject("$and", Arrays.<Object> asList(new BasicDBObject("$gte", Arrays.<Object> asList("$$result.timestamp", 1483537204000L)),
                                new BasicDBObject("$lte", Arrays.<Object> asList("$$result.timestamp", 1483537214000L)))));
                return new BasicDBObject("$filter", filter);
            }
        }).as("data")
);

List<BasicDBObject> dbObjects = monoTemplate.aggregate(aggregation, "collectionname", BasicDBObject.class).getMappedResults();