2012-06-12 8 views
1

J'ai une collection avec des documents imbriqués. Chaque document a également un champ _id.Documents imbriqués et index _id dans mongodb

Voici un exemple d'une structure de documents

{ 
    "_id": ObjectId("top_level_doc"), 
    "title": "Cadernos", 
    "parent": "4fd55bbc5d1709793b000008", 
    "criterias": { 
    "0": { 
     "_id": ObjectId("a_nested_doc"), 
     "value": "caderno", 
     "operator": "contains", 
     "field": "design0" 
    } 
    } 
} 

Je veux être en mesure de trouver le document imbriqué simplement en recherchant il est _id

Avec cette requête

{ 
    "criterias._id" : ObjectId("a_nested_doc") 
} 

Il retourne la document parent (je veux juste celui qui est imbriqué).

Idéalement je voudrais faire

{ 
    "_id" : ObjectId("a_nested_doc") 
} 

Et ce serait retourner le document avec cet identifiant (soit son imbriqué ou non).

Ps. J'ai édité les valeurs "_id" par souci de simplicité juste pour cet exemple.

Répondre

1

Vous devrez peut-être vivre avec la sélection de criterias._id (sans au moins écrire une enveloppe autour de la requête), mais vous pouvez sélectionner le document lui-même en récupérant simplement un sous-ensemble des champs.

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 }); 
+0

Je sautillait il ne est pas venu que, puisque ces documents sont générés dynamiquement et à ne pas toujours tenir la même structure (par exemple le champ « critères » pourraient avoir un nom complètement différent). –

+0

Pouvez-vous clarifier dans votre question comment deux documents peuvent différer (avec un exemple si possible) à ce sujet? – stew

+0

Eh bien, le nom du champ avec les documents imbriqués ne sera pas toujours "critères" mais j'utiliserai toujours le même code pour interroger la base de données. –

Questions connexes