Я пытаюсь запросить mongodb с помощью spring. У нас есть коллекция, которая содержит дерево и включает список элементов как путь к дереву (поэтому мы можем легко пересечь дерево). У нас есть запрос, который должен возвращать все дочерние узлы определенного node. Наш запрос основан на выборе всех узлов с node (parent) в пути и на один уровень ниже родительского (уровня). Наши критерии заключаются в следующем:
Criteria.where("treePath").in(parentId).and("treePath").size(level)
Увы, когда мы называем это на mongodb, получаем следующее исключение:
org.springframework.data.mongodb.InvalidMongoDbApiUsageException: Due к ограничениям com.mondod.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);
Но это только обновит первую запись, и мне все они будут обновлены.
Спасибо!