如何在Spring Data MongoOperation中使用MongoDB$let

如何在Spring Data MongoOperation中使用MongoDB$let,spring,mongodb,spring-boot,spring-data,spring-data-mongodb,Spring,Mongodb,Spring Boot,Spring Data,Spring Data Mongodb,MongoDB以单个元素数组的形式返回$count。我想把它转换成一个对象(int或String),这样我就可以把它直接映射到类中的String字段。为此,我使用了下面的投影,将其转换为int32对象。现在,我想将下面的投影转换为Spring数据MongoOperationaggregate { $project:{ "count": { $let:{ "vars":{ "elem": { $array

MongoDB以单个元素数组的形式返回
$count
。我想把它转换成一个对象(int或String),这样我就可以把它直接映射到类中的
String
字段。为此,我使用了下面的投影,将其转换为
int32
对象。现在,我想将下面的投影转换为Spring数据
MongoOperation
aggregate

{  
  $project:{
  "count": 
    {
      $let:{
        "vars":{
          "elem":
            { $arrayElemAt:["$count",0] }
        },
        "in":{
          "count" :"$$elem.totalVideos"
        }  
      }
    }
  }
}
阅读文档,我构建了它的一部分,如下所示

Let.define(Let.ExpressionVariable.newVariable("elem").
                    forExpression(ArrayOperators.ArrayElemAt.arrayOf("count").elementAt(0)))
但不确定我是否做对了。有人知道如何在Spring数据中实现这一点吗

提前感谢

我们应用
计数“$$elem.totalVideos”
而不是
计数“$$elem.totalVideos”{“$toInt”:“$$elem.totalVideos”}

您可以使用
.ToString
.ToLong

Aggregation.project()
    .and(
        Let.define(Let.ExpressionVariable
            .newVariable("elem")
                .forExpression(
                    ArrayOperators.ArrayElemAt.arrayOf("count").elementAt(0)
                )
            ).andApply(PropertyExpression.property("count").definedAs(ToInt.toInt("$$elem.totalVideos")))
            //.andApply(ToInt.toInt("$$elem.totalVideos"))
    ).as("count")
不太漂亮的实现
Aggregation.project()
    .and(
        Let.define(Let.ExpressionVariable
            .newVariable("elem")
                .forExpression(
                    ArrayOperators.ArrayElemAt.arrayOf("count").elementAt(0)
                )
            ).andApply(new AggregationExpression() {
                @Override
                public Document toDocument(AggregationOperationContext context) {
                    return new Document("count", "$$elem.totalVideos");
                }
            })
    ).as("count")