mongodb - 将 $strLenCP 与 Spring Data MongoDB 结合使用

标签 mongodb spring-data aggregation-framework

我有这个 mongodb 查询

db.getCollection('myCollection').aggregate(
    [{
        $project: {
            length: {
                $strLenCP: "$prefix"
            }
        }
    }, {
        $sort: {
            length: -1
        }
    }]
)

我想将其用于 spring java 项目,但我无法编写正确的 java 代码(排序不是问题)。

我试过了

Aggregation agg = newAggregation(project().andExpression("strLenCP(prefix)").as("prefixLength"));
AggregationResults < RequestSettingsWithPrefixLength > results = mongoTemplate.aggregate(agg, RequestSettings.class, RequestSettingsWithPrefixLength.class);
List < RequestSettingsWithPrefixLength > requestSettingsList = results.getMappedResults();

但我在 agg JSON 中得到一个空键( Debug模式):

{
    "aggregate": "__collection__",
    "pipeline": [{
        {
            "$project": {
                "prefixLength": {
                    "null": ["$prefix"]
                }
            }
        }]
    }
}

我可以看到我的 agg 对象有这个投影操作:

expression -> strLenCP(prefix)
field -> AggregationField: AggregationField - name: prefixLength,  target: prefixLength, synthetic: true
params -> []

我不确定这是否正确,但我找不到任何使用 strLenCP 的文档。 我只发现这个使用 strLenCP 投影的测试: https://github.com/spring-projects/spring-data-mongodb/blob/dc57b66adfd60b4d69d1d349b4fcfa4ab0da95e7/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/SpelExpressionTransformerUnitTests.java#L922

有人可以帮忙吗?

干杯

最佳答案

1.10.0.RC1 中添加了对 Mongo3.4 聚合运算符的支持。如果您同意更新到发布候选版本,那么一切都应该可以正常工作。

或者您可以尝试以下操作,但需要使用 1.8.5 版本。

 Aggregation aggregation = newAggregation(
  project().and(new AggregationExpression() {
      @Override
      public DBObject toDbObject(AggregationOperationContext aggregationOperationContext) {
          return new BasicDBObject("$strLenCP", "$prefix");
      }
  }).as("prefixLength")
 );

关于mongodb - 将 $strLenCP 与 Spring Data MongoDB 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41550451/

相关文章:

java - 使用 spring-data 数据未持久保存在连接列中

MongoDB - 如何合并文档的字典字段?

spring-data跨店实体管理

node.js - 排序和限制导致带有回调的查询

java - 如何使用spring mongorepository获取随机文档?

javascript - 如何查找与查询中具有完全相同数组条目的文档

MongoDB嵌套对象聚合计数

mongodb - 将日期从字符串格式转换为mongodb中的日期格式

node.js - 如何在 MEAN 堆栈中调试 Mongoose 和 MongoDB?

java - Spring Data MongoDB 集合聚合