2017-08-27 275 views
0

選擇字段我有一個JSON結構是這樣的:貓鼬從填充陣列

// Users Collection 

[{ 
    "id": "1", 
    "email": "[email protected]", 
    "contacts": [ 
    { 
     "user": "2", // reference 
     "nickname": "blub" 
    }, 
    { 
     "user": "3", // reference 
     "nickname": "blub" 
    }, 
    ], 
    "otherfield": "anything" 
}] 

User對象包含一個數組contacts這基本上代表引用Users的列表。爲了允許爲每個用戶存儲額外的數據(如nickname),我有一個對象數組,而不是一個ObjectId數組。

現在我想通過指定要解析的字段來填充聯繫人(例如,ID和電子郵件)。因此,預期輸出是這樣的:

{ 
    "id": "1", 
    "email": "[email protected]", 
    "contacts": [ 
    { 
     "user": { 
     "id": "2", 
     "email": "[email protected]", 
     // without other fields 
     }, 
     "nickname": "blub" 
    } 
    ], 
    "otherfield": "anything" 
} 

我已經試過這樣的事情

User.findById(id) 
    .populate('contacts.user') 
    .select('contacts.user.email') 

但後來我的聯繫人數組只包含一個空的對象。

另外,如果我試試這個:

User.findById(id).populate({ 
    path: 'contacts.user', 
    select: 'email' 
}) 

結果只是沒有任何人口父用戶:

{ 
    email: "[email protected]", 
    id: "1" 
} 

回答

1

嘗試

User.findById(id).populate({ 
    path: 'contacts.user', 
    select: 'email' 
}) 

填充多個路徑的documentation

+0

謝謝。這是行得通的。 –

0

最後我發現我在documentation忽略(謝謝@Mikey)

Story. 
    findOne({ title: /casino royale/i }). 
    populate('author', 'name'). // only return the Persons name 
    exec(function (err, story) { 
    if (err) return handleError(err); 

    console.log('The author is %s', story.author.name); 
    // prints "The author is Ian Fleming" 

    console.log('The authors age is %s', story.author.age); 
    // prints "The authors age is null' 
    })