2017-09-16 3 views
0

Ich versuche, ein Feld eine Ebene höher in meiner Filialdokumentabfrage zurückzugeben. Mein Schema ist:Rückgabe Felder eine Ebene nach oben aus Filialdokument Abfrage Mongodb

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

wenn ich eine Abfrage schreiben einen bestimmten Kontakt zu erhalten, indem Sie etwas in der ‚geteilten‘ Subdokument passend, ich habe Zugriff auf die Felder in der Subdokument.

Mein Problem ist, dass ich nach Kontakten auf der Grundlage einer owner_id im freigegebenen Filialdokument suchen möchte, aber ich möchte die 'first_name' und 'last_name' eine Ebene höher.

Um die Subdokument Abfrage ich folgendes tun würde:

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

Enthält die Felder in der übergeordneten nicht zurück.

Wie bewegen Sie sich auf eine Ebene, um diese Felder zu bekommen?

+0

Ist "Profil" den Namen eines Feldes in Ihrem Dokument? – styvane

+0

Profil ist das Dokument – cnak2

+0

Wenn "Profil" nicht der Name eines Felds ist, dann sollten Sie entfernen Sie es aus Ihrem Beitrag entfernen, auch in Betracht ziehen, uns das erwartete Ergebnis zu zeigen. – styvane

Antwort

1

versuchen diese

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

Hallo Vignesh, danke, dass du mich an diese Modifikatoren gewandt hast, aber dein Code-Snippet hat nicht funktioniert. Es ist tatsächlich db.profile. – cnak2

Verwandte Themen