MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Użyj $stdDevSamp lub $stdDevPop z Spring Mongo

Istnieje wyraźna różnica między „niedostępne” i „brak zaimplementowanej metody pomocniczej” , i tak jest w tym przypadku. Tylko dlatego, że nie ma „pomocnika” do implementacji $stdDevSamp lub $stdDevPop operatorów, nie oznacza to, że nie mogą być używane, o ile oczywiście łączysz się z instancją MongoDB 3.2.

Wszystko, czego naprawdę potrzebujesz, to niestandardowa klasa obsługująca AggregationOperation interfejs, który pozwoli na budowę przy użyciu 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);
    }
}

Następnie możesz użyć tej klasy w konstrukcji potoku agregacji, tak jak na przykład:

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

I to jest odpowiednik przykład dokumentacji :

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

Jako interfejs dla AggregationOperation klasa łatwo miesza się z zaimplementowanymi pomocnikami:

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

Możesz więc nadal korzystać z funkcji, nawet jeśli nie ma „wbudowanego pomocnika”, aby opracować dla ciebie konstrukcję obiektu BSON. Po prostu sam wykonujesz konstrukcję.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak uruchomić MongoDB jako usługę Windows?

  2. Apollo/GraphQL:Jak uzyskać zagnieżdżone elementy?

  3. CouchDB vs. MongoDB:10 rzeczy, które powinieneś wiedzieć

  4. Nie znaleziono katalogu danych MongoDB /data/db

  5. Rails + MongoMapper + pomoc dotycząca formularza EmbeddedDocument