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

Cách sử dụng thao tác $ cond trong khung tổng hợp Spring-MongoDb

Nếu sử dụng bản phát hành Dữ liệu mùa xuân hiện tại có hỗ trợ cho $cond toán tử thông qua $project đường ống dẫn, sau đó điều này có thể được chuyển đổi thành (chưa được kiểm tra):

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;
import static org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Cond.*;
import org.springframework.data.mongodb.core.query.Criteria;

Cond condOperation = ConditionalOperators.when(Criteria.where("start").is("EARLY"))
                                    .thenValueOf("deltastart.start")
                                    .otherwise("deltastart.end");

Aggregation agg = newAggregation(project().and(condOperation).as("start"));
AggregationResults<MyClass> results = mongoTemplate.aggregate(agg, MyClass.class); 
List<MyClass> myList = results.getMappedResults();

Đối với phiên bản Spring-Data MongoDB không hỗ trợ $cond trong hoạt động tổng hợp, có một giải pháp là triển khai AggregationOperation giao diện để tiếp nhận DBObject:

public class CustomProjectAggregationOperation implements AggregationOperation {
    private DBObject operation;

    public CustomProjectAggregationOperation (DBObject operation) {
        this.operation = operation;
    }

    @Override
    public DBObject toDBObject(AggregationOperationContext context) {
        return context.getMappedObject(operation);
    }
}

Sau đó, triển khai $project hoạt động như một DBObject trong quy trình tổng hợp giống như một đối tượng mà bạn có:

DBObject operation = (DBObject) new BasicDBObject(
    "$project", new BasicDBObject(
         "start", new BasicDBObject(
                "$cond", new Object[]{
                        new BasicDBObject(
                            "$eq", new Object[]{ "$start", "EARLY"}
                        ),
                        "$deltastart.start",
                        "$deltastart.end"
                 }
           )
     )
);

sau đó bạn có thể sử dụng trong TypeAggregation:

TypedAggregation<CustomClass> aggregation = newAggregation(CustomClass.class,
    new CustomProjectAggregationOperation(operation)
);
AggregationResults<CustomClass> result = mongoTemplate.aggregate(aggregation, CustomClass.class); 


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $ cond

  2. Cách triển khai MongoDB trên Heroku

  3. 3 cách trả lại mẫu tài liệu ngẫu nhiên từ bộ sưu tập MongoDB

  4. Lưu trữ Enums dưới dạng chuỗi trong MongoDB

  5. Đặt thời gian hết hạn cho bộ sưu tập trong mongodb bằng mongoose