2017-09-16 6 views
0

私のサブ文書クエリでフィールドを1レベル上に戻そうとしています。私のスキーマは次のとおりです。サブフィールドクエリから1レベル上のフィールドを返すmongodb

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

私は「共有」サブ文書の中で何かを照合することによって、特定の連絡先を取得するクエリを書く場合、Iサブ文書内のフィールドへのアクセス権を持っています。

私の問題は、共有サブ文書のowner_idに基づいて連絡先を検索したいのですが、私は 'first_name'と 'last_name'を1レベル上に戻したいと思います。

私は次のことを行うと、サブ文書を照会するには、次の

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

は、親のフィールドを返しません。

レベルを上げてそのフィールドを取得するにはどうすればよいですか?

+0

を試すには、ドキュメント内の「プロファイル」フィールドの名前ですか? – styvane

+0

プロファイルは文書 – cnak2

+0

"profile"がフィールドの名前でない場合は、投稿から削除する必要があります。また、期待される結果を表示することを検討してください。 – styvane

答えて

1

この

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

こんにちはVignesh、これらの修飾子に私を回してくれてありがとう、しかしあなたのコードスニペットは機能しませんでした。実際にはdb.profileです。 – cnak2

関連する問題