2013-08-11 4 views
1

J'utilise le document withe pilote Java qui ressemble à ceci (un exemple réel de test):requête la valeur d'un document sous dans MongoDB

{ 
    "_id" : ObjectId("5207fe359b88bfa6f90a82b0"), 
    "meta_id" : "d6eb1b13-50c7-473f-8348-b5a638a542a0", 
    "name" : "Fake Name Inc.", 
    "created" : ISODate("2013-08-11T21:12:21.533Z"), 
    "members" : { 
     "5207fe359b88bfa6f90a82af" : [ 
      "Admin", 
      "User" 
     ] 
    } 
} 

Je veux choisir le tableau de chaînes sur le chemin " members.5207fe359b88bfa6f90a82af "(qui est une liste de rôles). Je ne sais pas comment faire ça. On dirait qu'une projection fonctionnerait ici, mais je suis assez nouveau pour Mongo que la façon dont la projection est écrite n'est pas évidente.

Je peux bien sûr charger tout l'objet ou peut-être même simplement le champ "membres", mais je pense que je devrais pouvoir sélectionner exactement les données que je recherche.

Alors, est-ce que quelqu'un a une idée de comment une telle requête serait écrite?

Note: Cette question suggère que je dois peut-être changer la structure du document pour faciliter les choses: MongoDB - Query by sub-tree

Répondre

3

Vous pouvez utiliser la notation de points dans le paramètre de projection de find pour ce faire. Dans la coquille:

db.test.find(
    {_id : ObjectId("5207fe359b88bfa6f90a82b0")}, 
    {'members.5207fe359b88bfa6f90a82af': 1, _id: 0}) 

Retours:

{ 
    "members": { 
    "5207fe359b88bfa6f90a82af": [ 
     "Admin", 
     "User" 
    ] 
    } 
} 
+0

Hmm ... Je tentais, mais peut-être mon test fonctionnel ne regardais pas la bonne chose que je ne m'y attendais pas toute la structure reviens. En quoi consiste le "_id: 0" dans la projection? –

+0

@BrillPappin Ceci exclut le champ '_id' dans le document retourné car il est inclus par défaut. – JohnnyHK

+0

Ahh, ça a du sens. Ce serait le _id du document lui-même que je pense avoir lu, est retourné par défaut. –

Questions connexes