2017-09-16 1 views
0

J'essaie de retourner un champ d'un niveau dans ma requête de sous-document. Mon schéma est le suivant:Renvoie les champs d'un niveau à partir de la requête de sous-document mongodb

profile:{ 
    contacts:[{ 
     first_name:'Tom', 
     last_name:'Smith', 
     shared:[{ 
       owner_id:'something', 
       other_data:'something' 
     }] 
    }, 
    { 
     //.... more contacts 
    }] 
} 

si j'écris une requête pour obtenir un contact particulier en faisant correspondre quelque chose dans le « partagé » sous-document, j'ai accès aux champs dans le sous-document. Mon problème est que je veux rechercher des contacts basés sur un owner_id dans le sous-document partagé, mais je veux retourner le 'first_name' et le 'last_name' d'un niveau.

Pour interroger le sous-document que je ferais ce qui suit:

db.profile.find({'contacts.shared':{ower_id:'something},{'first_name':1, 'last_name':1}}) 

ne renvoie pas les champs du parent.

Comment voulez-vous monter d'un niveau pour obtenir ces champs?

+0

Est "profil" de nom d'un champ dans votre document? – styvane

+0

Profil est le document – cnak2

+0

Si "profil" n'est pas le nom d'un champ, alors vous devriez supprimer le supprimer de votre message, pensez également à nous montrer le résultat attendu. – styvane

Répondre

1

essayer cette

db.people.aggregate([ 
{$unwind:'$profile.contacts'}, 
{$unwind:'$profile.contacts.shared'}, 
{$match:{ 
    'profile.contacts.shared.owner_id':"1"} 
},{ 
    $group:{ 
     _id:null, 
     fname:{$first:"$profile.contacts.first_name"}, 
     lname:{$first:"$profile.contacts.last_name"} 
    } 
} 
    ]) 
+0

Salut Vignesh, merci de m'avoir donné accès à ces modificateurs, mais votre extrait de code n'a pas fonctionné. C'est en fait db.profile. – cnak2