【发布时间】:2019-12-31 17:39:01
【问题描述】:
我正在尝试从一个数组中获取一个属性,该数组在我的文档中有一堆属性,并将结果作为新数组放入
这是一个简单的 map 聚合。我可以使用以下查询在 shell 中使用 mongo 来做到这一点:
db.getCollection('foo').aggregate([
{ '$project': { 'newField': { '$map': { input: '$contacts', in: '$$this.email' } } }
])
不过,我无法使用 Spring Mongo 在 Java 中创建它。我检查了文档,发现:https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.aggregation.supported-aggregation-operations
我可以使用该信息和我的 IDE 的帮助来创建它:
AggregationOperation project = Aggregation.project()
.and(VariableOperators.Map.itemsOf("contacts")
.as("c")
.andApply(document -> new Document("newFieldArray", StringOperators.valueOf("c.email")))).as("newField")
但它返回 null 并且除此之外它很难调试。我一直在调试器中看到这个:
"includedDivisions" : { "$map" : { "input" : "$contacts", “as”:“c”,“in”:{“c”:{“$java”: org.springframework.data.mongodb.core.aggregation.StringOperators$StringOperatorFactory@796460bf } } } },
任何帮助将不胜感激
【问题讨论】:
标签: java mongodb spring-boot