2013-07-13 42 views
0

我在MongoDB中有兩個集合,或者在貓鼬中有兩個集合 - 用戶和帳戶。 用戶架構獲取子文檔存在於不同集合中的mongodb文檔的子文檔

{ 
    account: [{type: db.Schema.Types.ObjectId , ref: 'Account'}] 
} 

帳戶架構如下所示。

{network:String, 
firstName: String, 
lastName:String, 
networkId:Number, 
accessToken: String, 
accessTokenExpiration:Number, 
userId: {type: db.Schema.Types.ObjectId, ref: 'User'} 
} 

所以它基本上是用戶和帳戶之間的一對多關係。在express中,我有一個路徑來獲取具有參數userId的用戶say/api/user的詳細信息(匹配用戶的mongodb objectId)。 我想返回此請求的整個用戶對象。它也應包含子文檔(即所有用戶帳戶)。

例如

{ "_id": "51e1b1b2993a51b0ce000005", "account": [ { 
"network": "Facebook", 
"networkId": xxxx, 
"accessToken": "yyyyy", 
"accessTokenExpiration": 11111, 
"firstName": "John", 
"lastName":"Doe" 
} ] } 

而不是

{ "_id": "51e1b1b2993a51b0ce000005", "account": [ "51e1b1b2993a51b0ce000004" ] } 

是否有MongoDB的或貓鼬的方式來此而實際上不必重複在用戶對象的帳戶陣列和在賬戶中收集搜索。

謝謝。

回答

1

貓鼬有population是專爲這種情況下:

Users.findById(id) 
    .populate('account') 
    .exec(function (err, user) { 
    if (err) return next(err); 
    res.json(user); 
    }) 

或者,如果你使用express-mongoose插件:

res.send(Users.findById(id).populate('account')) 
+0

的作品就像一個魅力 – rOrlig