sql >> Database teknologi >  >> NoSQL >> MongoDB

Brug $stdDevSamp eller $stdDevPop med Spring Mongo

Der er en tydelig forskel mellem "ikke tilgængelig" og "ingen implementeret hjælpemetode" , og det er det virkelige tilfælde her. Bare fordi der ikke er nogen "hjælper" til at implementere $stdDevSamp eller $stdDevPop operatører, betyder ikke, at de ikke kan bruges, så længe du opretter forbindelse til en MongoDB 3.2-instans, selvfølgelig.

Alt du virkelig behøver er en tilpasset klasse, der understøtter AggregationOperation grænseflade, der tillader konstruktion ved hjælp af DBObject :

public class CustomAggregationOperation implements AggregationOperation {
    private DBObject operation;

    public CustomAggregationOperation (DBObject operation) {
        this.operation = operation;
    }

    @Override
    public DBObject toDBObject(AggregationOperationContext context) {
        return context.getMappedObject(operation);
    }
}

Så kan du bruge den klasse i aggregeringsrørledningskonstruktion som sådan:

Aggregation aggregation = newAggregation(
    new CustomAggregationOperation(
        new BasicDBObject("$sample", new BasicDBObject("size",100))
    ),
    new CustomAggregationOperation(
        new BasicDBObject(
            "$group",
            new BasicDBObject("_id",null)
                .append("ageStdDev",new BasicDBObject("$stdDevSamp","$age"))
        )
    )
);

Og det svarer til dokumentationseksemplet :

db.users.aggregate(
   [
      { "$sample": { "size": 100 } },
      { "$group": { "_id": null, "ageStdDev": { "$stdDevSamp": "$age" } } }
   ]
)

Som en grænseflade til AggregationOperation klassen blandes let med de implementerede hjælpere:

Aggregation aggregation = newAggregation(
    // Using the match helper for the `$match` stage
    match(
        Criteria.where("age").gte(20).lte(50)
    ),
    // Mixed in with custom classes for the others
    new CustomAggregationOperation(
        new BasicDBObject("$sample", new BasicDBObject("size",100))
    ),
    new CustomAggregationOperation(
        new BasicDBObject(
            "$group",
            new BasicDBObject("_id",null)
                .append("ageStdDev",new BasicDBObject("$stdDevSamp","$age"))
        )
    )
);

Så du kan stadig bruge funktioner, selvom der ikke er nogen "buit in helper" til at udarbejde BSON Object-konstruktionen for dig. Du laver bare konstruktionen selv.




  1. Fjern en post fra array ved hjælp af MongoDB-Java-driver

  2. hvordan opdaterer man en Mongo.db-samling i meteor.js?

  3. Få hele rækken af ​​en af ​​dens strenge. Array er inde i et andet array. Mongodb/Javascript

  4. Sådan opretter du en ny database i MongoDB ved hjælp af c#-driveren