【问题标题】:How to use ConcatArrays in Spring Data MongoDB如何在 Spring Data MongoDB 中使用 ConcatArrays
【发布时间】:2021-06-06 17:55:45
【问题描述】:

我有以下JS代码:

$concatArrays: [
              "$some.path",
              [
                {
                  "foo": "baz",
                  "x": 5
                }
              ]
            ]

我该如何处理ArrayOperators.ConcatArrays

【问题讨论】:

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


    【解决方案1】:

    玩具可以像下面这样使用。您可以在concat() 中传递聚合表达式或引用字段名称。所以你可以做的是,你可以在concat()之前添加新数组就像

    db.collection.aggregate([
      {
        $addFields: {
          secondArray: [
            { "foo": "baz", "x": 5 }
          ]
        }
      },
      {
        "$project": {
          combined: {
            "$concatArrays": [ "$path", "$secondArray" ]
          }
        }
      }
    ])
    

    工作Mongo playground

    ArrayOperators.ConcatArrays concatArrays = ArrayOperators.ConcatArrays
    .arrayOf("path")
    .concat("secondArray");
    

    【讨论】:

    • THE_SECOND_ARRAY 是什么?它的字符串表示?你能用我提供的数组演示一下吗?
    • 您是否在$concatArray 中硬编码了foo 数组?
    【解决方案2】:

    假设数组字段在文档中定义如下:

    {
            "_id": ObjectId("60bdc6b228acee4a5a6e1736"),
            "some" : {
                    "path" : [
                            {
                                    "foo" : "bar",
                                    "x" : 99
                            }
                    ]
            },
    }
    

    以下 Spring Data MongoDB 代码返回 result- 一个包含两个元素的数组。数组字段"some.path" 和输入数组myArr 使用ArrayOperators.ConcatArrays API 连接。

    String json = "{ 'foo': 'baz', 'x': 5 }";
    Document doc = Document.parse(json);
    List<Document> myArr = Arrays.asList(doc);
    
    MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "testDB");
    Aggregation agg = newAggregation(
        addFields()
            .addFieldWithValue("myArr", myArr)
            .build(),
        addFields()
           .addField("result").withValue(ConcatArrays.arrayOf("$some.path").concat("$myArr"))
           .build()
    );
            
    AggregationResults<Document> results = mongoOps.aggregate(agg, "testColl", Document.class);
    

    【讨论】:

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