2015-03-21 3 views
0

j'ai un schéma comme celui-ciRécupère les champs spécifiques avec requête MongoDB

{ 
    _id:ObjectId(), 
    ..., 
    translations:[{ 
     value: "English", 
     code:"en" 
    },{ 
     value: "German", 
     code:"de" 
    }] 
} 

Tout objet ont une traduction avec le code « en » et « de », Comment puis-je obtenir tous les objets (valeur, id) avec le code 'en'? A Le résultat devrait ressembler à ressembler à ceci:

[{ 
    _id:ObjectId(), 
    value:"English" 
},.... 
...] 
+0

double possible de [récupérer uniquement l'élément demandées dans un tableau d'objets dans la collection MongoDB] (http://stackoverflow.com/questions/3985214/retrieve-only-the-queried-element-in- an-object-array-in-mongodb-collection) – styvane

Répondre

2

Vous pouvez le faire en utilisant aggregation pipeline

  • $unwind le tableau translations
  • Utilisez $match pour sélectionner les documents avec code 'en'
  • Utilisez $project pour inclure ou réinitialiser les champs dans votre résultat.
db.collection.aggregate(
     [ 
      { "$unwind": "$translations"}, 
      { "$match": { "translations.code": "en" }}, 
      { "$project": { "value": "$translations.value", "_id": 1 }} 
     ] 
    )