2013-04-11 10 views
1

J'apprends MongoDB depuis quelques semaines maintenant et je n'ai toujours aucune idée comment interroger des documents imbriqués dans mon projet. J'ai lu les MongoDB-docs et googlé beaucoup, mais je n'ai pas trouvé de bonnes explications ou des tutoriels pour mon problème. Peut-être que tu peux m'aider!Requête imbriquée dans mongoDB

J'ai une collection avec la structure suivante (ici la sortie JSON):

{ 
    community: "1", 
    date: 1365680790125, 
    isIndoor: "true", 
    party: { 
     teams: [ 
      { 
       isWinner: true, 
       players: [ 
        { 
         name: "jim", 
         hits: 4, 
         isFinisher: true 
         }, 
         { 
          name: "john", 
          hits: 6, 
          isFinisher: false 
         } 
        ] 
        }, 
        { 
         isWinner: false, 
         players: [ 
          { 
           name: "mike", 
           hits: 6, 
           isFinisher: false 
           }, 
           { 
            name: "moe", 
            hits: 3, 
            isFinisher: false 
           } 
          ] 
         } 
        ] 
        }, 
        id: "3141be7f9988d872" 
       } 

Et maintenant, je veux obtenir tous les enregistrements où « jim » ont participé.

J'ai essayé cette requête (en coffeescript), mais j'obtenir aucun résultat et je pense que son très merdique ...

query = party: 
$all:[ 
    teams: 
     $in: [ 
      player: [ 
       name: 'jim' 
      ] 
     ] 
    ] 

J'espère que vous pouvez me aider à comprendre la requête de documents imbriqués. Merci!

Répondre

1

Utilisez dot notation pour requête sur les champs d'objets embarqués:

query = { 'party.teams.players.name': 'jim' } 
+1

hey, merci pour la réponse! J'ai essayé votre requête sur ma base de données (plate-forme deployd) et cela ne fonctionne pas .. j'obtiens tous les enregistrements et pas seulement les enregistrements avec le nom de joueur 'jim'. Ensuite, j'ai essayé votre requête dans le navigateur mongoDB Shell et cela a fonctionné ... – rojan21

+2

okay ... c'est un bug dans deployd. cela fonctionne maintenant, voir: https://groups.google.com/forum/#!msg/deployd-users/NidQ1sT9u6o/v8oGZZa0flsJ – rojan21

+0

J'ai exactement le même problème, @ rojan21, deployd retourner tous les enregistrements sur n'importe quelle requête, mais je ne peux pas trouver d'informations sur ce bug ... – Danita