MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Използвайте $stdDevSamp или $stdDevPop с Spring Mongo

Има явна разлика между "не е налично" и "няма внедрен помощен метод" , и това е истинският случай тук. Просто защото няма „помощник“ за прилагане на $stdDevSamp или $stdDevPop оператори, не означава, че не могат да се използват, стига, разбира се, да се свързвате с екземпляр на MongoDB 3.2.

Всичко, от което наистина се нуждаете, е персонализиран клас, поддържащ AggregationOperation интерфейс, който ще позволи конструиране с помощта на 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);
    }
}

След това можете да използвате този клас в изграждането на конвейер за агрегиране по следния начин:

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

И това е еквивалентът на пример за документация :

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

Като интерфейс за AggregationOperation класът лесно се смесва с внедрените помощници:

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

Така че все още можете да използвате функции, дори ако няма "buit in helper", който да изработи конструкцията на BSON Object вместо вас. Вие просто правите конструкцията сами.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. вземете съответната информация срещу стойността на обекта в MongoDB

  2. Съхраняване на йерархия на директории в хранилище на данни ключ-стойност

  3. Mongodb и подмасив за сортиране

  4. Актуализирайте множество документи, като предоставите документи в body, mongoose/mongodb

  5. задайте стойности по подразбиране на mongoose масиви във възел js