我有一份文件。
{
"errors" : [
{
"priority" : 3,
"category" : "aaa"
"other":"nothing"
},
{
"priority" : 4,
"category" : "bbb"
"other":"nothing"
},
{
"priority" : 2,
"category" : "ccc"
"other":"nothing"
},
{
"priority" : 3,
"category" : "ddd"
"other":"nothing"
},
{
"priority" : 2,
"category" : "eee"
"other":"nothing"
}
],
"file_name" : "xxx.json",
"vehicle_id" : "esdf",
"day" : "2022-03-08"
}
我用js客户端执行一个命令。
db.wty_test.aggregate({
$project: {
'_id': 0, 'errors.priority': 1, 'errors.category': 1, 'file_name': 1, 'vehicle_id': 1,
}
})
x1c 0d1x错误是一个包含对象的数组。
现在我需要用java客户端(springboot-data-mongo)覆盖这个命令。这是我的java代码。
import org.springframework.data.mongodb.core.MongoTemplate;
...
Aggregation aggregation = Aggregation.newAggregation(Aggregation.project("errors.priority", "errors.category", "file_name", "vehicle_id"));
mongoTemplate.aggregate(aggregation, "wty_test", HashMap.class).getMappedResults();
优先级和类别没有错误。
如何使用java获得与js相同的结果?
我试过了,但不是我想要的。
3条答案
按热度按时间0s0u357o1#
下面是一种获得所需结果的方法。
注意,这里使用了MongoDB Java Driver API查询语法,
Document
是org.bson.Document
。本地查询到Java Driver的转换使用了$map
聚合数组运算符(看起来这是(可能是唯一的)方法)。对于
MongoTemplate.aggregate
,代码为:替代方法:
如果你的查询只是关于 projection 的,你可以使用
MongoTemplate#find
方法来查询,这样构造和理解起来要简单得多:它的
MongoTemplate
版本:nwsw7zdq2#
您需要使用
nested()
函数,如下所示:cwtwac6a3#