我有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;
}
通过使用字段,如何编写查询。
答案 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();