MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Sử dụng $ stdDevSamp hoặc $ stdDevPop với Spring Mongo

Có sự khác biệt rõ ràng giữa "không có sẵn" "không có phương pháp trình trợ giúp nào được triển khai" , và đó là trường hợp thực tế ở đây. Chỉ vì không có "người trợ giúp" để triển khai $stdDevSamp hoặc $stdDevPop không có nghĩa là chúng không thể được sử dụng, miễn là bạn đang kết nối với phiên bản MongoDB 3.2.

Tất cả những gì bạn thực sự cần là một lớp tùy chỉnh hỗ trợ AggregationOperation giao diện, điều đó sẽ cho phép xây dựng bằng 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);
    }
}

Sau đó, bạn có thể sử dụng lớp đó trong xây dựng đường ống tổng hợp như sau:

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

Và điều đó tương đương với ví dụ về tài liệu :

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

Làm giao diện cho AggregationOperation lớp dễ dàng kết hợp với các trình trợ giúp được triển khai:

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

Vì vậy, bạn vẫn có thể sử dụng các tính năng ngay cả khi không có "buit in helper" để tìm ra cấu trúc BSON Object cho bạn. Bạn chỉ cần tự xây dựng.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách lưu trữ hình ảnh byte [] trong mongodb cho quy trình Doocr

  2. lưu trữ upvotes / downvotes trong mongodb

  3. Truy vấn sau khi điền trong Mongoose

  4. MongoDB (Java) - Làm cách nào để chạy truy vấn được lưu trong tệp javascript?

  5. xử lý @ trong chuỗi kết nối mongodb