MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

$filter in $project MongoDB mit Spring Data

Ich habe es geschafft, mein Problem mit der Spring Boot-Version 1.4.1.RELEASE zu lösen, und ich habe Folgendes getan:

Aggregation aggregation = newAggregation(
            match(Criteria.where("devices.evaluationDate").is(date)),
            project().and(new AggregationExpression() {
                @Override
                public DBObject toDbObject(AggregationOperationContext aggregationOperationContext) {
                    DBObject filterExpression = new BasicDBObject();
                    filterExpression.put("input", "$devices");
                    filterExpression.put("as", "device");
                    filterExpression.put("cond", new BasicDBObject("$eq", Arrays.<Object> asList("$$device.evaluationDate", date)));
                    return new BasicDBObject("$filter", filterExpression);
                }
            }).as("devices")
    );

    AggregationResults<SpotMovimientos> list = mongoOperations.aggregate(aggregation,
            MyClass.class, MyClass.class);

Ich habe auf dieser Grundlage ausgearbeitet:Unterstützt Spring Data MongoDb den $filter-Array-Aggregationsoperator?

Mein Projekt war auf Spring Boot 1.4.0.RELEASE, aber diese Version hatte nicht den AggregationExpression Schnittstelle PUBLIC, also habe ich gerade auf 1.4.1.RELEASE aktualisiert und es hat funktioniert.