2017-09-16 126 views
0

我想在子文檔查詢中返回一個字段。我的模式是:從子文檔查詢返回上一級字段mongodb

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

如果我寫一個查詢來獲取通過匹配的「共享」子文檔的東西特別的接觸,我有機會在子文檔中的字段。

我的問題是我想基於共享子文檔中的owner_id搜索聯繫人,但我想要返回上一級的'first_name'和'last_name'。

要查詢的子文檔我會做到以下幾點:

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

不父返回的字段。

你如何向上移動一個級別來獲得這些字段?

+0

是「配置」文檔中字段的名字嗎? – styvane

+0

個人資料是文件 – cnak2

+0

如果「個人資料」不是字段的名稱,那麼您應該刪除從您的帖子中刪除它,也考慮向我們展示預期的結果。 – 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

相關問題