Documentos anidados e índices _id en mongodb
Frecuentes
Visto 1,666 veces
1
Tengo una colección con documentos anidados en ella. Cada documento también tiene un campo _id.
Aquí hay un ejemplo de una estructura de documentos.
{
"_id": ObjectId("top_level_doc"),
"title": "Cadernos",
"parent": "4fd55bbc5d1709793b000008",
"criterias": {
"0": {
"_id": ObjectId("a_nested_doc"),
"value": "caderno",
"operator": "contains",
"field": "design0"
}
}
}
Quiero poder encontrar el documento anidado simplemente buscando su _id
Con esta consulta
{
"criterias._id" : ObjectId("a_nested_doc")
}
Devuelve el documento principal (solo quiero el que está anidado).
Idealmente haría esto
{
"_id" : ObjectId("a_nested_doc")
}
Y devolvería el documento con esa identificación (ya sea que esté anidado o no).
PD. Edité los valores "_id" en aras de la simplicidad solo para este ejemplo.
1 Respuestas
1
Es posible que tenga que vivir con la selección de criterias._id (sin escribir un contenedor alrededor de la consulta, al menos), pero puede seleccionar el documento en sí simplemente recuperando un subconjunto de los campos.
http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields
// The simplest case converted to your use case
db.collection.find( { criterias._id : ObjectId("a_nested_doc") }, { criterias : 1 } );
Respondido el 12 de junio de 12 a las 19:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas mongodb or haz tu propia pregunta.
Esperaba que no llegara a eso ya que estos documentos se generan dinámicamente y no siempre tienen la misma estructura (por ejemplo, el campo "criterios" podría tener un nombre completamente diferente). - Igor Azevedo
¿Puede aclarar en su pregunta cómo dos documentos pueden diferir (con un ejemplo si es posible) con respecto a esto? - estofado
Bueno, el nombre del campo con los documentos anidados no siempre será "criterio", pero siempre usaré el mismo código para consultar la base de datos. - Igor Azevedo
De todos modos, no veo ninguna alternativa mejor que usar el método que describiste, así que haré cambios en mi código para que funcione de esta manera. Gracias - Igor Azevedo
Deseché mi intento de comentario, de nada y buena suerte. - estofado