【发布时间】:2020-08-26 03:50:25
【问题描述】:
我有 2 个收藏,如下所示:
branches
{
_id: ...,
custId: "abc123",
branchCode: "AA",
...other fields
}
branchHolidays
{
_id: ...,
custId: "abc123",
holidayDate: ISODate("2019-06-01T00:00:00:0000"),
holidayStatus: "PROCESSED",
..other fields
}
需要获取所有 branchHolidays 以及 branches 集合中可用的 custId 以及 branches 集合中的 branchCode。 (branches.custId = branchHolidays.custId)
对于加入的第一部分,我尝试了以下查询,但我从 branchHolidays 集合中获取了所有字段。
db.getCollection('branchHolidays').aggregate([
{
$lookup: {
localField: "custId",
from: "branches",
foreignField: "custId",
as: "holidays"
}
},
$match: { holidayStatus: "PROCESSED" }
])
上述查询返回 branchHolidays 集合中的所有文档。 我是 mongo 的新手,但我无法弄清楚问题所在。已经完成了大部分 SO 查询,但没有找到任何帮助。
注意:branches 集合中有多个 branchCodes 映射到 1 个 custId。
【问题讨论】:
-
不完全清楚您要做什么。由于您在
branchHolidays上进行聚合并且仅通过holidayStatus: "PROCESSED"进行过滤,因此您应该在branchHolidays中获取所有文档,除了那些未标记为PROCESSED的文档。您是否打算根据$lookup结果进行额外的过滤? -
不应该只给我那些 branchHolidays.custId = branches.custId 的文件吗?相反,即使分支集合中不存在 custId,它也会给我所有文档。
标签: mongodb mongodb-query aggregation-framework mongodb-lookup