MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Gunakan $stdDevSamp atau $stdDevPop dengan Spring Mongo

Ada perbedaan mencolok antara "tidak tersedia" dan "tidak ada metode pembantu yang diterapkan" , dan itulah kasus sebenarnya di sini. Hanya karena tidak ada "pembantu" untuk mengimplementasikan $stdDevSamp atau $stdDevPop operator, tidak berarti mereka tidak dapat digunakan, selama Anda terhubung ke instance MongoDB 3.2 tentunya.

Yang Anda butuhkan hanyalah kelas khusus yang mendukung AggregationOperation antarmuka, yang akan memungkinkan konstruksi menggunakan 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);
    }
}

Kemudian Anda dapat menggunakan kelas itu dalam konstruksi pipa agregasi seperti:

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

Dan itu setara dengan contoh dokumentasi :

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

Sebagai antarmuka untuk AggregationOperation kelas dengan mudah bercampur dengan pembantu yang diimplementasikan:

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

Jadi Anda masih dapat menggunakan fitur meskipun tidak ada "pembantu bawaan" untuk mengerjakan konstruksi Objek BSON untuk Anda. Anda hanya melakukan konstruksi sendiri.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. error saat mengikuti Aplikasi Tumblelog dengan Flask dan MongoEngine

  2. Apa jalur database default untuk MongoDB?

  3. Copot pemasangan MongoDB di Mac OS X

  4. Temukan setelah mengisi luwak

  5. Bagaimana cara terhubung ke cluster Atlas M0 (Free Tier) dengan benar melalui driver Java?