将$ strLenCP与Spring Data MongoDB一起使用 [英] Use $strLenCP with Spring Data MongoDB

查看:262
本文介绍了将$ strLenCP与Spring Data MongoDB一起使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个mongodb查询

I have this mongodb query

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

我想在Spring Java项目中使用的

但我无法编写正确的Java代码(排序不是问题).

that I want to use into a spring java project but I can't manage to write the correct java code (the sort is not the issue).

我尝试过

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(调试模式)中得到了一个空键:

but I am getting a null key in agg JSON (debug mode):

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

我可以看到我的agg对象具有以下投影操作:

I can see that my agg object has this projection operation:

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

我不确定这是正确的,但是找不到使用strLenCP的任何文档. 我只发现使用strLenCP投影的测试:

I am not sure this is correct but I can't find any documentation that uses strLenCP. I only found this test that uses the strLenCP projection: 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聚合运算符的支持.如果您可以更新以发布候选版本,则一切正常.

The support for Mongo3.4 aggregation operators were added in 1.10.0.RC1. If you are okay with updating to release candidate version everything should just work fine.

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

Or you can try the following but you'll need to use 1.8.5 version.

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

这篇关于将$ strLenCP与Spring Data MongoDB一起使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆