【发布时间】:2020-10-02 05:35:00
【问题描述】:
我有这个 Aggregation Mongo 查询,但我不知道如何用 Java 编写 Projection 部分。你能帮我解决这个问题吗?
db.getCollection("motion").aggregate(
[
{
"$match" : {
"type" : "NON_PERIODIC_MOTION",
"createdAt" : {
"$gte" : ISODate("2020-01-24T23:00:00.000+0000")
},
"minAccAmount" : {
"$gte" : 1000.0
}
}
},
{
"$limit" : 200.0
},
{
"$project" : {
"amount" : 1.0,
"createdAt" : 1.0,
"motionExternalId" : 1.0,
"motionRef" : 1.0
}
},
{
"$sort" : {
"amount" : 1.0
}
}
],
{
"allowDiskUse" : false
}
);
这是匹配操作部分的代码。
Criteria criterias = new Criteria().andOperator(Criteria.where(Motion.ACCELERATION).gte(minAccAmount)
.and(Motion.TYPE).is(MotionTypeEnum.NON_PERIODIC_MOTION)
.and("createdAt").gte(startDate).lte(endDate));
MatchOperation matchOperation = Aggregation.match(criteria);
【问题讨论】:
-
您使用
find发布的MongoDB 查询代码不是聚合操作,但您的Java 代码是。MongoTemplate有find和aggregate方法。 -
发布了正确的查询
-
投影是使用Aggregation.project() 方法构建的。该方法被重载并接受
Fields或字符串字段名称。as var-args。
标签: java mongodb spring-boot mongodb-query aggregation-framework