将 MongoDB 查询转换为 spring 数据 mongo 模板

Convert MongoDB query to spring data mongo template

我需要将以下查询转换为 spring 数据 mongo 模板。我看过很多例子,但是 none 里面有 setunion 和数组

{​​​​​​​
           $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}​​​​​​​] ] }​​​​​​​
           }​​​​​​​
        }

像这样使用 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 提供单个元素,它会将其转换为您想要的数组。