【发布时间】:2014-11-04 16:30:52
【问题描述】:
我正在使用 NodeJs,MongoDB Native 2.0+
以下查询获取一个包含嵌入式员工和服务数组的客户文档。
db.collection('clients').findOne({_id: sessId}, {"services._id": 1, "staff": {$elemMatch: {_id: reqId}}}, callback)
返回如下结果:
{
_id: "5422c33675d96d581e09e4ca",
staff:[
{
name: "Anders"
_id: "5458d0aa69d6f72418969428"
// More fields not relevant to the question...
}
],
services: [
{
_id: "54578da02b1c54e40fc3d7c6"
},
{
_id: "54578da42b1c54e40fc3d7c7"
},
{
_id: "54578da92b1c54e40fc3d7c9"
}
]
}
请注意,services 中的每个嵌入对象实际上都包含多个字段,但 _id 是唯一通过查询投影返回的字段。
从这个返回的数据开始,我从services 中“提取”所有 id,并将它们保存在一个数组中,稍后用于验证。这绝不是一个困难的操作......但我很好奇......有没有一种简单的方法来进行某种聚合而不是find,直接从数据库中获取一组已经提取的objectId。像这样的:
{
_id: "5422c33675d96d581e09e4ca",
staff:[
{
name: "Anders"
_id: "5458d0aa69d6f72418969428"
// More fields not relevant to the question...
}
],
services: [
"54578da02b1c54e40fc3d7c6",
"54578da42b1c54e40fc3d7c7",
"54578da92b1c54e40fc3d7c9"
]
}
【问题讨论】:
标签: mongodb mongodb-query