sql >> データベース >  >> NoSQL >> MongoDB

SpringMongoで$stdDevSampまたは$stdDevPopを使用する

    「利用できません」には明確な違いがあります および「実装されたヘルパーメソッドなし」 、そしてそれがここでの本当のケースです。 $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"))
            )
        )
    );
    

    そのため、BSONオブジェクトの構築を行うための「バイトインヘルパー」がなくても、機能を使用できます。自分で建設するだけです。




    1. MongoDBでネストされたオブジェクトにアクセスする

    2. MongoDBUncleanShutdown-修復に失敗します

    3. MeteorのMongoからクエリされたオブジェクトの属性にどのようにアクセスしますか

    4. マングースでObjectIdを生成するにはどうすればよいですか?