所以我有一个组织的集合,如下所示:
[
{
"name": "Organization 1",
"locations": [
"5b0096f064386ef34a5118d0", // Location 1
"5b0096f064386ef34a5118d2" // Location 2
]
},
{
"name": "Organization 2",
"locations": [
"5b0096f064386ef34a5118d0" // Location 1
]
}
// ~1,000 organizations ...
]
以及地点的集合,如下所示:
[
{
// Location 1
"_id": "5b0096f064386ef34a5118d0",
"state": "AK",
"city": "Adak"
},
{
// Location 2
"_id": "5b0096f064386ef34a5118d2",
"state": "AK",
"city": "Akhiok"
},
// ~36,000 locations ...
{
// Location 3
"_id": "5b0096f064386ef34a51a63e",
"state": "WY",
"city": "Yoder"
}
]
每个组织都有一系列位置ID(引用位置集合)。
我希望能够获得不同的"使用过的" /引用的位置列表,以及填充的数据(如城市和州)。
例如,在上面的场景中,我想回来:
[
{
// Location 1
"_id": "5b0096f064386ef34a5118d0",
"state": "AK",
"city": "Adak"
},
{
// Location 2
"_id": "5b0096f064386ef34a5118d2",
"state": "AK",
"city": "Akhiok"
}
]
...因为位置1和位置2是唯一实际引用的。
关于如何实现这一目标的任何想法?
答案 0 :(得分:0)
不要在单个查询中尝试这样做。你会遇到异步挑战:
int y = &x
取而代之的是组织:
MongoOrganization.findById(org_id, function (error, org) {
if (error) res.send(error);
let locations;
MongoLocations.find({'_id': { $in: org.locations } }, function (err, locs) {
if (err) res.send(err);
locations = locs;
})
org.locations = locations;
res.json(org);
})
然后再拨打电话获取位置:
MongoOrganization.findById(org_id, function (error, org) {
if (error) res.send(error);
res.json(org);
})
然后使用对象数组
复制字符串数组