我是MongoDB的新手,我在表名医生中有数据
[
{
_id: "610d0f36a793342c08b49b0a",
hospitals: [
{
_id: "6166c2ea807d823f20722d52",
hospital: "6166c2ea807d823f20722d4f"
},
{
_id: "61cd446d20c97e302c667e89",
hospital: "61cd446d20c97e302c667e87"
}
]
}
]第二表名称工作日
[
{
_id: "6166c2ea807d823f20722d4f",
hospitalId: "615442355273d22b90b92491",
fee: "800"
},
{
_id: "61cd446d20c97e302c667e87",
hospitalId: "615d4ebc5521472af0aae53d",
fee: "1000"
}
]第三表医院
[
{
_id: "615442355273d22b90b92491",
hospitalName: "ABC"
},
{
_id: "615d4ebc5521472af0aae53d",
hospitalName: "ABC"
}
]如果我用
db.doctors.find().populate({
path: "hospitals.hospital",
populate: {
path: "hospitalId",
select: "hospitalName",
},
})我得到这种格式的结果
[
{
_id: "610d0f36a793342c08b49b0a",
hospitals: [
{
_id: "6166c2ea807d823f20722d52",
hospital: {
_id: "6166c2ea807d823f20722d4f",
fee: "800",
hospitalId: {
_id: "615442355273d22b90b92491",
hosptialName: "ABC"
}
}
},
{
_id: "61cd446d20c97e302c667e89",
hospital: {
_id: "61cd446d20c97e302c667e87",
fee: "1000",
hospitalId: {
_id: "615d4ebc5521472af0aae53d",
hosptialName: "ABC"
}
}
}
]
}
]现在,我使用聚合实现了这样的结果。
db.doctors.aggregate([{$lookup:{from:"weekdays", localField:"hospitals.hospital", foreignField:"_id", as:"hospitals"}}])它回来了
[
{
_id: "610d0f36a793342c08b49b0a",
hospitals: [
{
_id: "6166c2ea807d823f20722d52",
hospitalId: "615442355273d22b90b92491",
fee: "800"
},
{
_id: 61cd446d20c97e302c667e89,
hospitalId: "615d4ebc5521472af0aae53d",
fee: 800
}
]
}
]如何使用聚合实现从查找查询中获得的结果。
发布于 2022-02-10 10:08:40
好的,基本上.populate是一种猫鼬的方法。人口
我假设您希望聚合的结果如下所示。
[
{
"_id": "111",
"hospitals": [
{
"_id": "331",
"fee": "800",
"hospital": {
"_id": "441",
"hospitalName": "ABC"
},
"hospitalId": "441"
},
{
"_id": "332",
"fee": "1000",
"hospital": {
"_id": "442",
"hospitalName": "ABC"
},
"hospitalId": "442"
}
]
}
]因此,要实现这一点,您需要$unwind数组,并在对它们进行分组之前再次使用第三个集合hospitals和$unwind执行一个$lookup。
这是MongoDB游乐场链接
db.doctors.aggregate([
{
$lookup: {
from: "weekdays",
localField: "hospitals.hospital",
foreignField: "_id",
as: "hospitals"
}
},
{
"$unwind": "$hospitals"
},
{
$lookup: {
from: "hospitals",
localField: "hospitals.hospitalId",
foreignField: "_id",
as: "hospitals.hospital"
}
},
{
"$unwind": "$hospitals.hospital"
},
{
"$group": {
"_id": "$_id",
"hospitals": {
"$push": "$hospitals"
}
}
}
])https://stackoverflow.com/questions/71045928
复制相似问题