如何在 Criteria 中使用 mongodb 聚合函数?
How to use mongodb aggregate functions in Criteria?
我正在做一个使用 spring 数据 mongodb 的项目。我正在做这样的 mongo 查询:
Query query = new Query();
Criteria one = Criteria.where(DB_FIELD_1).gt(1);
Criteria two = Criteria.where(DB_FIELD_2).lt(10);
Criteria final = new Criteria().andOperator(one,two);
query.addCriteria(final);
// after making the query, I am executing it using mongoTemplate
现在,我有一个格式为 YYYYMMDD 的日期字段。我想检查它的月份是否=当前月份。例如,如果该字段为 20170501,则日期的月份 (05) 为当前月份(5 月 5 日)。如何从日期中提取月份值并检查此逻辑以及上述其他条件(一和二)?我知道有 $month 可以从日期中提取月份值。但是,我不知道如何在 "Criteria" class 中合并聚合函数。我的最终结果应该是这样的:
Criteria final = new Criteria().andOperator(one,two,criteria to check month = current month);
query.addCriteria(final);
您可以在当前 spring 数据库版本 1.10.2/ Spring 1.5.2 Boot 中使用以下聚合管道。在 $project
中包含您希望输出的其他字段。
对于 3.4 x mongo 服务器版本,使用 $addFields
而不是 $project
。
AggregationOperation project = Aggregation.project().and(DateOperators.dateOf(DB_FIELD_1).month()).as("field1").and(DateOperators.dateOf(DB_FIELD_2).month()).as("field2");
AggregationOperation match = Aggregation.match(Criteria.where("field1").gt(1)
.and("field2").lt(10));
Aggregation aggregation = Aggregation.newAggregation(project, match);
List<BasicDBObject> results = mongoTemplate.aggregate(aggregation, collectionname, BasicDBObject.class).getMappedResults();
用于 1.4.1 版本
AggregationOperation project = Aggregation.project().and(DB_FIELD_1).extractMonth().as("field1").and(DB_FIELD_2).extractMonth().as("field2");
我正在做一个使用 spring 数据 mongodb 的项目。我正在做这样的 mongo 查询:
Query query = new Query();
Criteria one = Criteria.where(DB_FIELD_1).gt(1);
Criteria two = Criteria.where(DB_FIELD_2).lt(10);
Criteria final = new Criteria().andOperator(one,two);
query.addCriteria(final);
// after making the query, I am executing it using mongoTemplate
现在,我有一个格式为 YYYYMMDD 的日期字段。我想检查它的月份是否=当前月份。例如,如果该字段为 20170501,则日期的月份 (05) 为当前月份(5 月 5 日)。如何从日期中提取月份值并检查此逻辑以及上述其他条件(一和二)?我知道有 $month 可以从日期中提取月份值。但是,我不知道如何在 "Criteria" class 中合并聚合函数。我的最终结果应该是这样的:
Criteria final = new Criteria().andOperator(one,two,criteria to check month = current month);
query.addCriteria(final);
您可以在当前 spring 数据库版本 1.10.2/ Spring 1.5.2 Boot 中使用以下聚合管道。在 $project
中包含您希望输出的其他字段。
对于 3.4 x mongo 服务器版本,使用 $addFields
而不是 $project
。
AggregationOperation project = Aggregation.project().and(DateOperators.dateOf(DB_FIELD_1).month()).as("field1").and(DateOperators.dateOf(DB_FIELD_2).month()).as("field2");
AggregationOperation match = Aggregation.match(Criteria.where("field1").gt(1)
.and("field2").lt(10));
Aggregation aggregation = Aggregation.newAggregation(project, match);
List<BasicDBObject> results = mongoTemplate.aggregate(aggregation, collectionname, BasicDBObject.class).getMappedResults();
用于 1.4.1 版本
AggregationOperation project = Aggregation.project().and(DB_FIELD_1).extractMonth().as("field1").and(DB_FIELD_2).extractMonth().as("field2");