Pregunta

Estoy tratando de consultar MongoDB usando la primavera. Tenemos una colección que sostiene un árbol y incluye una lista de artículos como un camino de árbol (para que podamos recorrer fácilmente el árbol). Tenemos una consulta que necesita devolver todos los nodos infantiles de un nodo específico. Nuestra consulta se basa en seleccionar todos los nodos que tienen el nodo (padre) en la ruta y son un nivel más bajo que el padre (nivel). Nuestros criterios son los siguientes:

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

Aloy, cuando llamamos a esto en MongoDB, obtenemos la siguiente excepción:

org.springframework.data.mongodb.invalidmongododbapiusageexception: Due a las limitaciones del com.mongodb.basicdbObject, no puede agregar un La segunda expresión de 'treepath' especificada como 'Treepath: {"$ Tamaño": 2}'. Los criterios ya contienen 'Treepath: {"$ in": [ "50137df5f49f9b4a6481d639"]} '.

¿Hay otras sugerencias sobre cómo lograr lo mismo? Una opción en la que estaba pensando fue consultar directamente a Mongodb. Lo intenté

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

Pero esto solo actualizará el primer registro y los necesito todos actualizados.

¡Gracias!

¿Fue útil?

Solución

Esto hará lo que desee:

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());

imprime

{ "$and" : [ { "treePath" : 100} , { "treePath" : { "$size" : 5}}]}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top