【问题标题】:Convert MongoDB query to spring data mongo template将 MongoDB 查询转换为 Spring Data mongo 模板
【发布时间】:2021-04-07 05:46:43
【问题描述】:

我需要将以下查询转换为 spring data mongo 模板。我看过很多例子,但没有一个在里面设置和数组

{​​​​​​​
           $project: {​​​​​​​
               "datastreamId": 1,
               "datastreamName": 1,
               "deviceId":  1,
               "searchTags": {​​​​​​​ $arrayElemAt: [ "$searchTags", 0 ] }​​​​​​​,
               "datastreamPos":  {​​​​​​​$arrayElemAt:[{​​​​​​​$split: ["$datastreamId" , "_"]}​​​​​​​, 1]}​​​​​​​,
               "destId": "$destNode.id",
               "dataBucketId": "$dataBucketNode.id",
               "assetId": "$assetNode.id",
               "hierarchy": {​​​​​​​ $setUnion: [ "$hierarchy", [{​​​​​​​id: "$datastreamId", name: "$datastreamName", levelType: "Channel", level:6}​​​​​​​] ] }​​​​​​​
           }​​​​​​​
        }

【问题讨论】:

    标签: java mongodb spring-data-mongodb mongotemplate


    【解决方案1】:

    像这样使用 ConcatArrays 在 SetUnion 中创建一个数组

    Document arrayDocument = new Document();
    arrayDocument.put("id", "$datastreamId");
    arrayDocument.put("name", "$datastreamName");
    arrayDocument.put("levelType", "Channel");
    arrayDocument.put("level", 6);
    
    ArrayOperators.ConcatArrays array = ArrayOperators.ConcatArrays.arrayOf(Collections.singletonList(arrayDocument));
    SetOperators.SetUnion setUnion = SetOperators.SetUnion.arrayAsSet("hierarchy").union(array);
    

    现在在 Projection 中使用这个 setUnion。

    注意:由于我们仅在 $concatArrays 内为 List 提供单个元素,它会将其转换为您想要的数组。

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2019-12-01
      • 2021-09-03
      • 2015-10-09
      • 2020-10-14
      • 2018-01-08
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多