我目前在我的Spring项目中为MongoDB编写了一个聚合查询,其中我使用的是$ project operator。在这个操作符中,我想比较两个字段,以便按照预计返回结果"匹配"核心价值。这是mongoDB shell的等价物(可以工作):
{$project:
{matches:
{$eq: ["$lastDate", "$meta.date"]}
}
}
我已经阅读了Spring Data MongoDB文档,并找到了一些有关ProjectionOperator& 39& 39和'以及使用SpEL的方法。我调查的结果是Java代码:
new ProjectionOperation().andExpression("lastDate == meta.date").as("matches")
不幸的是我收到了异常:
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!
据我所检查,Spring Data MongoDB正确处理所有算术运算符但无法处理比较运算符。因此,我想问有没有其他方法可以使用Spring Data MongoDB创建此类查询?或者我可能不知道关于SpEL的一些重要事情?
答案 0 :(得分:0)
我通过将JSON聚合命令(使用DBObjects创建以保持查询的灵活性)传递给MongoDB来解决此问题,即:
MongoOperations#executeCommand(DBObject command)