如何将Mongo查询转换为Java对象

时间:2019-04-12 16:54:19

标签: java mongodb

我有Mongo个查询,该查询是使用NoSqlBooster(Tool)执行的,并且已经发布了。如何在Java对象中转换相同的查询。

这是Mongo查询:

db.revenue.aggregate([{
    $match: {
        hotelId: "122"
        sessionId: "dgd"
    }
}, {
    $group: {
        _id: {
             date: "$date",
             serviceOrFacilty: "$serviceOrFacilty"
         },
         "SUM(orderTotalAmount)":{
              $sum: "$orderTotalAmount"
         },
         "SUM(grandTotalAmount)":{
              $sum: "$grandTotalAmount"
         },
      }
},   {
      $project: {
          date: "$_id.date",
          serviceOrFacilty: "$_id.serviceOrFacilty",
          "SUM(orderTotalAmount)": "$SUM(orderTotalAmount)",
          "SUM(grandTotalAmount)": "$SUM(grandTotalAmount)"
      }
}])

这是我的实体/数据库类

public class RevenueReportsTemporaryStorage {
    @Id
    private String id;
    @Field(value = FIELDS.SESSSION_ID)
    private String sessionId;
    @Field(value = FIELDS.HOTEL_ID)
    private String hotelId;
    @Field(value = FIELDS.DATE)
    private String date;
    @Field(value = FIELDS.SERVICE_OR_FACILITY)
    private String serviceOrFacility;
    @Field(value = FIELDS.CATEGORY)
    private String serviceCategory;
    @Field(value = FIELDS.USER_NAME)
    private String userName
    @Field(value = FIELDS.ORDER_TOTAL)
    private Double orderTotalAmount;
    @Field(value = FIELDS.ADJUSTMENT)
    private Double adjustmentAmount;
    @Field(value = FIELDS.DISCOUNT)
    private Double discount;
    @Field(value = FIELDS.TAX)
    private Map<String, Double> taxAmountWithHead;
    @Field(value = FIELDS.GRAND_TOTAL)
    private Double grandTotalAmount;
}

通过使用字段,如何编写查询。

1 个答案:

答案 0 :(得分:1)

尝试一下。

Aggregation aggregation = newAggregation(
            match(Criteria.where(FIELDS.HOTEL_ID).is(hotelId).and(FIELDS.SESSSION_ID).is(uniqueId)),
            group(FIELDS.DATE,FIELDS.SERVICE_OR_FACILITY).sum(FIELDS.ORDER_TOTAL).as(FIELDS.ORDER_TOTAL).sum(FIELDS.ADJUSTMENT)
                    .as(FIELDS.ADJUSTMENT).sum(FIELDS.DISCOUNT).as(FIELDS.DISCOUNT).sum(FIELDS.GRAND_TOTAL)
                    .as(FIELDS.GRAND_TOTAL),
            sort(Sort.Direction.ASC, previousOperation(),FIELDS.DATE,FIELDS.SERVICE_OR_FACILITY));
    AggregationResults<RevenueReportsTemporaryStorage> groupResults = mongoTemplate.aggregate(aggregation,
            RevenueReportsTemporaryStorage.class, RevenueReportsTemporaryStorage.class);
    return groupResults.getMappedResults();