对于mongoose操作集合的方便之处确实不一般,但主要还是你在引用中对集合的设计,不过mongoose在使用ref关联集合的时候有限制和查出的集合的组合问题有点麻烦。不过不要紧,简单易用就行。
1.mongoose 中ref关联文档的用法
2.mongoose中populate查询关联文档
3.查询获得数组中单个集合
比如有集合:
{
"_id": 11111,
"im": {
"usergroup": [
{
"name": "好友列表-2",
"level": 1,
"_id": "53c4820263256dc410e98727",
"list": [
{
"_user": {
"nickname": "逐梦飞扬-2",
"_id": 22222,
"icon": "/default/heads/2.png"
}
},
{
"_user": null
},
{
"_user": null
},
{
"_user": null
},
{
"_user": null
},
{
"_user": null
}
]
},
{
"_id": "53c488bf95ad1de01756db88",
"name": "test usergroup",
"level": 1,
"list": []
}
]
}
}
上述的_user表示关联文档,如果你只想得到usergroup中的一个;结合条件为{'usergroup.$':1}就可以得到满足条件的一个代码如下:
UserModel.User.findOne({_id:11111,'im.usergroup._id':'53c488bf95ad1de01756db88'},{'im.usergroup.$':1})
.populate('im.usergroup.list._user',{icon:1,nickname:1,_id:1,name:1,remark:1})
.exec(function(err, ug){
cb(err,ug);
})
上述UserModel.User是用户的mongoose model
查询后可以得到:
{
"_id": 11111,
"im": {
"usergroup": [
{
"_id": "53c488bf95ad1de01756db88",
"name": "test usergroup",
"level": 1,
"list": []
}
]
}
}