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

Tra cứu MongoDB Dữ liệu Mùa xuân với Tổng hợp Đường ống

Dựa trên thông tin được cung cấp bởi @dnickless, tôi đã có thể giải quyết vấn đề này. Tôi sẽ đăng giải pháp hoàn chỉnh với hy vọng nó sẽ giúp ích cho người khác trong tương lai.

Tôi đang sử dụng mongodb-driver:3.6.4

Đầu tiên, tôi phải tạo một lớp hoạt động tổng hợp tùy chỉnh để tôi có thể chuyển vào một truy vấn mongodb JSON tùy chỉnh sẽ được sử dụng trong hoạt động tổng hợp. Điều này sẽ cho phép tôi sử dụng pipeline trong $lookup không được hỗ trợ với phiên bản trình điều khiển mà tôi đang sử dụng.

public class CustomProjectAggregationOperation implements AggregationOperation {
    private String jsonOperation;

    public CustomProjectAggregationOperation(String jsonOperation) {
        this.jsonOperation = jsonOperation;
    }

    @Override
    public Document toDocument(AggregationOperationContext aggregationOperationContext) {
        return aggregationOperationContext.getMappedObject(Document.parse(jsonOperation));
    }
}

Bây giờ chúng tôi có khả năng chuyển một truy vấn JSON tùy chỉnh vào triển khai mùa xuân mongodb của chúng tôi, tất cả những gì còn lại là cắm các giá trị đó vào một truy vấn TypedAggregation.

public List<FulfillmentChannel> getFulfillmentChannels(
    String SOME_VARIABLE_STRING_1, 
    String SOME_VARIABLE_STRING_2) {

    AggregationOperation match = Aggregation.match(
            Criteria.where("dayOfWeek").is(SOME_VARIABLE_STRING_1));
    AggregationOperation match2 = Aggregation.match(
            Criteria.where("deliveryZipCodeTimings").ne(Collections.EMPTY_LIST));
    String query =
            "{ $lookup: { " +
                    "from: 'deliveryZipCodeTiming'," +
                    "let: { location_id: '$fulfillmentLocationId' }," +
                    "pipeline: [{" +
                    "$match: {$expr: {$and: [" +
                    "{ $eq: ['$fulfillmentLocationId', '$$location_id']}," +
                    "{ $eq: ['$zipCode', '" + SOME_VARIABLE_STRING_2 + "']}]}}}," +
                    "{ $project: { _id: 0, zipCode: 1, cutoffTime: 1 } }]," +
                    "as: 'deliveryZipCodeTimings'}}";

    TypedAggregation<FulfillmentChannel> aggregation = Aggregation.newAggregation(
            FulfillmentChannel.class,
            match,
            new CustomProjectAggregationOperation(query),
            match2
    );

    AggregationResults<FulfillmentChannel> results = 
        mongoTemplate.aggregate(aggregation, FulfillmentChannel.class);
    return results.getMappedResults();
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để cập nhật tài liệu Mongo sau khi chèn nó?

  2. Sự khác biệt giữa lưu trữ một ObjectId và dạng chuỗi của nó, trong MongoDB

  3. Spring Data MongoDB - Chỉ mục, Chú thích và Bộ chuyển đổi

  4. Sử dụng findOne in a loop mất quá nhiều thời gian trong Node.js

  5. Truy vấn MongoDB để chỉ trả về tài liệu nhúng