我试图使用spring查询mongodb.我们有一个集合,其中包含一棵树和一个包含项目列表的树路径(因此我们可以轻松地遍历树).我们有一个查询,需要返回特定 node 的所有子 node .我们的查询基于 Select 路径中有 node (父 node )且比父 node (级别)低一级的所有 node .我们的标准如下:

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

唉,当我们在mongodb上调用它时,我们得到了以下例外:

组织.springframework.数据mongodb.InvalidMongoDbApiUsageException:到期

对于如何实现同样的目标,还有其他建议吗?我考虑的一个选项是直接查询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}}]}

Mongodb相关问答推荐

在单个mongo文档中组合数组与聚合

如何在MongoSH中的现有文档中插入字段

如何在Mongo中制作全覆盖索引

为什么这个查询可以在MongoDB中使用?

聚合管道可以用于更新数据库中的文档吗?

Mongo查找条件:不存在

优化游戏应用程序的反馈表单后端设计

如何在查找 foreignField 中使用通配符?

lexik_jwt_authentication下无法识别的选项api_platform

如何使用指南针连接到 mongodb replicaset (k8s)

通过insertId MongoDB获取文档

如何在 mongodb golang 的单个更新调用中使用 $set 和 $inc?

Mongodb 仅在值唯一时插入,否则更新 - 在 node.js 中

如何使用python将csv数据推送到mongodb

.insertOne 不是函数

.save() 不是函数 Mongoose

MongoDB:按标签获取文档

你如何在 Kubernetes 上设置 Mongo 副本集?

将 MongoDB 数据库复制到本地计算机

更新多个文档并返回所有更新的文档