spring-projects / spring-projects/spring-data-mongodb

Create array from field in update pipeline

Open
#4,861 1 comment 0 reactions 1 assignee View on GitHub

@christophstrobl is already working on this.

Since Jan 13, 2025.

type: enhancement
Dominant language
Java
Stars
1.7k
Forks
1.1k
PR merge metrics
No merged PRs in 30d

Description

I would like to concat an array with another field. If I use normal update then I can use $push operator but in pipeline update I have to use $concatArrays. The problem is that I have to create array from a field reference but it is not possible because input string is replaced by just a field reference.
For example I have document:

{
  "myArray": ["something"],
   "myField": "else"
}

and as result I want to have:

{
  "myArray": ["something", "else"]
}

I want to run this MongoDB Update pipeline:

db.getCollection("myCollection").update({}, [
    { "$set": { myArray: {"$concatArrays": ["$myArray", [ "$myField" ] ]} }
])

I tried to rewrite it to:

.set("myArray").toValue(ArrayOperators.ConcatArrays.arrayOf("myArray").concat("[\"$myField\"]"))

but it is translated to:

{ "$set" : { "myArray" : { "$concatArrays" : ["$myArray", "$myField\"]"]}}}

I would use custom AggregationExpresion but it has to return Document but this is unfortunately array.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.