Skip to content

Filter doesn't support expression as input #4394

Closed
@Flowwwww

Description

@Flowwwww

Here is the mongo command I want to write using spring data :

  {
    $addFields: {
      _filteredMetadata: {
        $filter: {
          input: {
            $objectToArray: "$data.metadata",
          },
          as: "filteredMetadata",
          cond: {
            $ne: [
              "$$filteredMetadata.k",
              "rawSamplingDate",
            ],
          },
        },
      },
    },
  },
]

Using Spring, i would have done like this :

 addFields()
                        .addField("_filteredMetadata")
                        .withValue(ArrayOperators
                                .arrayOf(ObjectOperators.valueOf("data.metadata").toArray())
                                .filter()
                                .as("filteredMetadata")
                                .by(ComparisonOperators.Ne.valueOf("filteredMetadata.k").notEqualToValue("rawSamplingDate")))
                        .build(),

But filter fails saying :

java.lang.IllegalStateException: Values must not be null
	at org.springframework.util.Assert.state(Assert.java:76)
	at org.springframework.data.mongodb.core.aggregation.ArrayOperators$ArrayOperatorFactory.filter(ArrayOperators.java:217)

It seems Filter input doesn't support expressions 🤔

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions