私はspringを使用してmongodbを照会しようとしています。ツリーを保持するコレクションがあり、アイテムのリストをツリーパスとしてインクルードします(ツリーを簡単にトラバースできるように)。特定のノードのすべての子ノードを返す必要があるクエリがあります。私たちのクエリは、パス内のノード(親)を持ち、親(レベル)より1レベル低いすべてのノードを選択することに基づいています。次のように私たちの基準は次のとおりです。同じフィールドを2回クエリするSpring Mongo基準
Criteria.where("treePath").in(parentId).and("treePath").size(level)
残念ながら、我々はMongoDBの上でこれを呼び出すときに、我々は次の例外を取得:
org.springframework.data.mongodb.InvalidMongoDbApiUsageException:COMの制限に ために.mongodb.BasicDBObjectの場合、 'treePath:{"$ size":2}'として指定された 番目の 'treePath'式を追加できません。 基準には既に 'treePath:{"$ in":[ "50137df5f49f9b4a6481d639"]}'が含まれています。
同じことを達成するための他の提案はありますか?私が考えていた1つの選択肢は、mongodbを直接照会することでした。試しました
String command = "{findAndModify:\"Task\",query:{$and:[{treePath:\"5013a79a36600872ecf4dba8\"},{treePath:{$size:2}},{order:{$gte:0}}]},update:{$inc:{order:1}}}";
CommandResult commandResult = mongoTemplate.executeCommand(command);
しかし、これは最初のレコードのみを更新し、すべて更新する必要があります。
ありがとうございます!
感謝を印刷します!素晴らしい仕事! – checklist
orOperatorを使用すると、同じフィールドの異なる値を照会することもできます(必要な場合)。 – hypercube