当前位置: 首页 > 知识库问答 >
问题:

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

公羊涛
2023-03-14

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

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

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

组织。springframework。数据mongodb。InvalidMongoDbApiUsageException:由于com的限制。mongodb。BasicDBObject,不能添加第二个指定为“treePath:{“$size”:2}”的“treePath”html" target="_blank">表达式。条件已包含“树路径:{“$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个答案

方楷
2023-03-14

这将做你想要的:

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}}]}
 类似资料:
  • 我最近在尝试按两个同等重要的列排序一个Hibernate Criteria查询时遇到了这个问题。基本上,我的意思是,如果我有一个表,其中一个列是一个日期(createdOnDate),另一个列是一个日期(modifiedOnDate),我希望比较来自Organization Object的orderBy子句中的所有日期。 为此,我这样尝试: 但是它首先根据modified_date对所有组织进行排

  • 文档: 操作: 合作伙伴: HQL(“INCASAT”=“兑现”,“VANDUT”=“出售”):

  • 问题内容: 我设法创建了一个适合我的查询。但是现在我遇到了一个问题,在给定当前显示结果的方式的情况下,查询将每个结果重复两次。我如何才能使其在一次显示的地方正确工作。 代码: 问题答案: 而不是使用use 。默认情况下,将返回一个具有关联索引 和 数字索引的数组,这将导致您两次看到结果。

  • 问题内容: 我有一个包含大量单词的数据库,但是我只想选择那些字符长度等于给定数字的记录(在示例情况3中): 但这不起作用…有人可以向我显示正确的查询吗? 问题答案: 抱歉,我不确定您在谈论哪个SQL平台: 在MySQL中: 在MSSQL中 LENGTH()(MySQL)或LEN()(MSSQL)函数将在您可以在WHERE子句中用作条件的列中返回字符串的长度。 编辑 我知道这确实很老,但是我想扩大答

  • v3.0开始,herosphp 提供了一套全新的设置查询条件的接口: MysqlModel::where($field, $opt, $value); 参数名称 参数类型 参数说明 $field string OR function 字段名称, 如果传入的是 function 的话,则说明是闭包. 闭包传入的是一组查询条件。 $opt string 操作符,如果不传入 $value 的情况下,$o

  • 问题 怎样在两个字典中寻寻找相同点(比如相同的键、相同的值等等)? 解决方案 考虑下面两个字典: a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 } 为了寻找两个字典的相同点,可以简单的在两字典的 keys() 或者 items() 方法返回结果上执行集合操作。