Reputation: 37
I need to convert the below Query to spring data mongo template. i have looked at many example but none have setunion with and array inside
{
$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}] ] }
}
}
Upvotes: 0
Views: 898
Reputation: 1382
Use ConcatArrays to have an array inside SetUnion like this
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);
Now use this setUnion inside Projection.
Note: As we are providing List with a single element only inside $concatArrays
, it will convert it into an array that you want.
Upvotes: 1