我正在尝试使用spring查询mongodb。我们有一个保存一棵树的集合,并包含一个项目列表作为树路径(因此我们可以轻松地遍历树)。我们有一个查询,该查询需要返回特定节点的所有子节点。我们的查询基于选择路径中具有节点(父级)并且比父级(级别)低一级的所有节点。我们的标准如下:

Criteria.where("treePath").in(parentId).and("treePath").size(level)

las,当我们在mongodb上调用此方法时,会收到以下异常:



还有其他关于如何实现相同目标的建议吗?我想到的一种选择是直接查询mongodb。我试过了
String command = "{findAndModify:\"Task\",query:{$and:[{treePath:\"5013a79a36600872ecf4dba8\"},{treePath:{$size:2}},{order:{$gte:0}}]},update:{$inc:{order:1}}}";
CommandResult commandResult = mongoTemplate.executeCommand(command);

但这只会更新第一条记录,我需要全部更新。

谢谢!

最佳答案

这将做您想要的:

int parentId = 100;
int level = 5;
Criteria c = new Criteria().andOperator(Criteria.where("treePath").is(parentId),
                                        Criteria.where("treePath").size(level));
System.out.println(c.getCriteriaObject());

它打印
{ "$and" : [ { "treePath" : 100} , { "treePath" : { "$size" : 5}}]}

07-27 13:43