2010-09-24 9 views
2

J'ai une collection comme suit:tableau dans une collection MongoDB

{ "_id" : ObjectId("4c9c63a95d765f996ca8dff4"), "count" : "28", "id" : "5565", "person" : [ 
    { 
     "id" : "5435df", 
     "name" : { 
      "fn" : "abc", 
      "ln" : "xyz" 
     }, 
     "sex" : "m", 
     "location" : { 
      "country" : "india" 
     } 

    }, 
    { 
     "id" : "dfg434", 
     "name" : { 
      "fn" : "def", 
      "ln" : "pqr" 
     }, 
     "sex" : "f", 
     "location" : { 

      "country" : "india" 
     } 

    } 
. 
. 
. 

] 
} 

la personne est un tableau, avec des champs mentionnés. Je souhaite trouver des personnes avec un id particulier ET un pays. seuls ces enregistrements "people" doivent être renvoyés. Comment vais-je faire ça? J'utilise Java. La structure est-elle correcte? Dois-je changer la structure du tableau en quelque chose d'autre?

merci. Comment les règles d'accès changent quand les parenthèses changent, dans ce cas, j'ai utilisé [], où j'aurais pu utiliser {}. quels changements?

Répondre

2
+0

qui n'a pas aidé :(avez-vous un autre exemple (en java) ou peut-être un bug sur JIRA pour montrer que? TIA –

+0

En utilisant un forEach pour chaque imbrication de tableau fonctionne, mais ce que je souhaite, est de retourner un bloc particulier, lorsque certaines données à l'intérieur est ce que je veux, par exemple: personne.country == "Inde" devrait retourne des blocs avec id: 5435df et id: dfg434 –

+0

Dans ce cas, vous allez vouloir les mettre dans un tableau. avec les développeurs sur leur forum. http://groups.google.com/group/mongodb-user/browse_thread/thread/eaf5a1e2a5817b61/868d8435bdaf57f0?q=#868d8435bdaf57f0 – luckytaxi

0

Peut-être essayer ensemble de mongo v2.2 +:

fagg=db.collection.aggregate([{$unwind: "$person"}, 
    {$project: {name:"$person.name",sex:"$person.sex"}}, 
    {$match: {sex: "f"}}]) 

    fagg.result.forEach(function(o){ 
    db.person.insert({name: o.name, sex: o.sex})}) 
Questions connexes