网站集字段 -_id, name
节点集合字段 -_id, siteId, name
设备收集字段 -_id, nodeId, name
传感器采集领域 -_id, deviceId, name
我是 MongoDB 新手,预期结果(没有重复数据):
[{
"_id": "608aa9bd323489617cfe2081",
"name": "Site One two 3",
"node": [{
"name": "Node Guj 3 222 ",
"device": [{
"mode": 1,
"siteId": "608aa9bd323489617cfe2081",
"nodeId": "608aa9cc323489617cfe2083",
"isActive": true,
"_id": "608aa9ee323489617cfe2084",
"sensor": [{
"_id": "608aa9ee323489617cfe2085",
"name": "NVR_Channel1"
}]
}]
}]
},
{
"_id": "608aa9bd323489617cfe2083",
"name": "Site One two 22",
"node": [{
"name": "Node Guj 3 222 ",
"device": []
}]
},
{
"_id": "608aa9bd323489617cfe2085",
"name": "SiteO",
"node": [{
"name": "Node22 ",
"device": [{
"mode": 1,
"siteId": "608aa9bd323489617cfe2081",
"nodeId": "608aa9cc323489617cfe2083",
"isActive": true,
"_id": "608aa9ee323489617cfe2084",
"sensor": []
}]
}]
}
]
正如我之前提到的,我是 MongoDB 的新手,我尝试了以下查询,但没有得到预期的结果
const result = await Site.aggregate([
{
$lookup:
{
from: "nodes",
localField: "_id",
foreignField: "siteId",
as: "node"
}
},
{
$lookup:
{
from: "devices",
localField: "node._id",
foreignField: "nodeId",
as: "device"
}
},
{
$lookup:
{
from: "sensors",
localField: "node.device._id",
foreignField: "deviceId",
as: "sensor"
}
}
]);
以下是当前响应,其中node
, device
,sensor
处于同一级别,预期是站点 -> 节点 -> 设备 -> 传感器。
[{
"_id": "608aab1016be1c11dfe77422",
"name": "Aivid_Site_One",
"node": [{
"_id": "608b9072932b3c0cc5ab4fd0",
"name": "no sensort 11"
},
{
"_id": "608b9073932b3c0cc5ab4fd1",
"name": "no sensort 11"
}
],
"device": [{
"_id": "608b9091932b3c0cc5ab4fd2",
"name": "3nd floor Device"
}],
"sensor": [{
"_id": "608b9091932b3c0cc5ab4f33",
"name": "sensor 1"
}]
}]