如何使用以下文档样本在Spring Data MongoDB Aggregation中投影嵌入式数组元素字段,我尝试过:
project("customers.id")
project("customers.[].id")
project("customers.?.id")
project("$customers.id")
但是没有用。
没有投影的结果文档:
{
"id": "group1",
"name": "Default Identity Management",
"warningThreshold": 900000,
"tariffId": "TR_0001",
"active": false,
"customers": [
{
"id": "1",
"name": "David",
"properties": [
{
"name": "phone",
"value": "678"
}
],
"roles": [
"dev"
]
},
{
"id": "2",
"name": "Peter",
"properties": [
{
"name": "phone",
"value": "770"
}
],
"roles": [
"techsales",
"dev"
]
}
]
}
这样的预期文档:
{
"id" : "group1",
"name" : "Group1",
"tariffId" : "TR_0001",
"warningThreshold" : 900000,
"customers" : [
{
"id" : "1",
"name" : "David",
"properties" : [
{
"name" : "phone",
"value" : "678"
}
]
},
{
"id" : "2",
"name" : "Peter",
"properties" : [
{
"name" : "phone",
"value" : "770"
}
]
}
]
}
我想包含customers []。id,customers []。name,customers []。properties。
非常感谢。
答案 0 :(得分:0)
我已经尝试了一段时间,但是没有。另外,这里关于stackoverflow的其他帖子以及Internet上的其他地方都没有提供我所寻找的解决方案。
我的问题类似于原始作者的问题:有一个文档,其中的字段是文档数组。我想查询文档中的所有顶级字段,并从数组中的文档中排除单个字段。
在问题注释中的s7vr答案对我有用!只是在这里重新发布,因为大多数人没有仔细阅读所有注释,这是一个非常有用的答案,这使我不必编写很多糟糕的代码! :D
AggregationOperation project = new AggregationOperation() {
@Override
public Document toDocument(AggregationOperationContext aggregationOperationContext) {
return new Document("$project", new Document("arrayField.nestedFieldToExclude", 0));
}
};
使用Lambda:
AggregationOperation project = aggregationOperationContext -> new Document("$project", new Document("arrayField.nestedFieldToExclude", 0));
总体管道:
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(criteria),
Aggregation.sort(Sort.Direction.DESC, "createdOn"),
project);
我只希望有一种更干净的方法直接使用Spring MongoDB Data API,而不是将这种方法与lambda函数一起使用。
另外,请注意,从spring-data-mongodb 2.2版开始,方法AggregationOperation.toDocument(AggregationOperationContext aggregationOperationContext)
已被弃用。