Spring Mongo 条件查询两次相同的字段

Posted

技术标签:

【中文标题】Spring Mongo 条件查询两次相同的字段【英文标题】:Spring Mongo criteria querying twice the same field 【发布时间】:2012-07-26 18:35:22 【问题描述】:

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

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

唉,当我们在 mongodb 上调用它时,我们得到以下异常:

org.springframework.data.mongodb.InvalidMongoDbApiUsageException:到期 由于 com.mongodb.BasicDBObject 的限制,您不能添加 第二个 'treePath' 表达式指定为 'treePath : "$size" : 2'。 条件已经包含 'treePath : "$in" : [ "50137df5f49f9b4a6481d639"]'。

关于如何实现同样的目标还有其他建议吗?我正在考虑的一种选择是直接查询 mongodb。我试过了

String command = "findAndModify:\"Task\",query:$and:[treePath:\"5013a79a36600872ecf4dba8\",treePath:$size:2,order:$gte:0],update:$inc:order:1";
CommandResult commandResult = mongoTemplate.executeCommand(command);

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

谢谢!

【问题讨论】:

【参考方案1】:

这会做你想做的事:

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]

【讨论】:

使用 orOperator,您还可以查询同一字段的不同值,如果您需要这样做的话。

以上是关于Spring Mongo 条件查询两次相同的字段的主要内容,如果未能解决你的问题,请参考以下文章

用PHP查询mongo数据时,条件是某个字段(A为数组)不为空,但是有的记录中并没有字段A,这个条件怎么写?

spring+mybatis中两次相同条件查询时 session一级缓存与数据库隔离级别需要注意的点

mongo一个字段有两个条件进行查询

Mongo查询list数组中一个字段大于特定条数

如何以不同的条件选择相同的字段两次并将结果显示为单独的字段

查询以从 Spring Data mongo 返回单个字段