【问题标题】:How to use MongoDB $let in Spring Data MongoOperation如何在 Spring Data MongoOperation 中使用 MongoDB $let
【发布时间】:2020-03-07 08:14:06
【问题描述】:

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

{  
  $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 Data 中做到这一点?

提前致谢

【问题讨论】:

    标签: spring mongodb spring-boot spring-data spring-data-mongodb


    【解决方案1】:

    漂亮的实现

    我们应用"count" : {"$toInt" : "$$elem.totalVideos"}而不是"count" :"$$elem.totalVideos"
    您可以使用ConvertOperators.ToStringConvertOperators.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")
    

    【讨论】:

      猜你喜欢
      • 2020-07-09
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多