1

I'm currently writing an aggregation query for MongoDB in my Spring project in which I'm using $project operator. Within this operator I would like to compare two fields in order to return the result as projected "matches" key value. Here's the mongoDB shell equivalent (which works): {$project: {matches: {$eq: ["$lastDate", "$meta.date"]} } }

I've read Spring Data MongoDB documentation and found some useful info about ProjectionOperator's 'andExpression' method which uses SpEL. The result Java code of my investigation was: new ProjectionOperation().andExpression("lastDate == meta.date").as("matches")

Unfortunately I'm receiving exception: java.lang.IllegalArgumentException: Unsupported Element: org.springframework.data.mongodb.core.spel.OperatorNode@70c1152a Type: class org.springframework.data.mongodb.core.spel.OperatorNode You probably have a syntax error in your SpEL expression!

As far as I've checked, Spring Data MongoDB handles all Arithmetic operators correctly but cannot handle the comparison ones. Therefore I want to ask is there any other way to create such query with Spring Data MongoDB? Or maybe I don't know something crucial about SpEL?

Stephen Kennedy
  • 20,585
  • 22
  • 95
  • 108

1 Answers1

0

I resolved this issue by passing JSON aggregate command (created with DBObjects in order to preserve flexibility of the query) to MongoDB, i.e.: MongoOperations#executeCommand(DBObject command)