Mongo 查找返回所有值
Mongo lookup returning all values
我有 2 个 collection,如下所示:
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 collection 中可用的 custId 以及来自 [=23= 的 branchCode ]分支collection。 (branches.custId = branchHolidays.custId)
对于连接的第一部分,我尝试了以下查询,但我从 branchHolidays collection.
获取了所有字段
db.getCollection('branchHolidays').aggregate([
{
$lookup: {
localField: "custId",
from: "branches",
foreignField: "custId",
as: "holidays"
}
},
$match: { holidayStatus: "PROCESSED" }
])
以上查询 returns 来自 branchHolidays collection 的所有文档。
我是 mongo 的新手,但我无法弄清楚问题出在哪里。已经完成了大部分 SO 查询,但没有找到任何有用的东西。
注意:branches中有多个branchCodes映射到1个custId collection.
$lookup
阶段类似于左外连接。示例聚合应该 return branchHolidays
集合中具有 holidayStatus: "PROCESSED"
的所有文档,并且每个文档都将添加一个字段 holidays
,其中包含 branches
中的所有文档具有相同 custId
的集合。对于那些不匹配任何分支的文档,holidays
字段将包含一个空数组。
如果您只想 return 具有匹配分支的文档,请匹配大小,例如:
holidays:{$not:{$size:0}}
另请注意,将 $match: { holidayStatus: "PROCESSED" }
放在 $lookup
之前将避免查询分支集合以查找将被删除的文档,这可能会提高性能。
我有 2 个 collection,如下所示:
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 collection 中可用的 custId 以及来自 [=23= 的 branchCode ]分支collection。 (branches.custId = branchHolidays.custId)
对于连接的第一部分,我尝试了以下查询,但我从 branchHolidays collection.
获取了所有字段db.getCollection('branchHolidays').aggregate([
{
$lookup: {
localField: "custId",
from: "branches",
foreignField: "custId",
as: "holidays"
}
},
$match: { holidayStatus: "PROCESSED" }
])
以上查询 returns 来自 branchHolidays collection 的所有文档。 我是 mongo 的新手,但我无法弄清楚问题出在哪里。已经完成了大部分 SO 查询,但没有找到任何有用的东西。
注意:branches中有多个branchCodes映射到1个custId collection.
$lookup
阶段类似于左外连接。示例聚合应该 return branchHolidays
集合中具有 holidayStatus: "PROCESSED"
的所有文档,并且每个文档都将添加一个字段 holidays
,其中包含 branches
中的所有文档具有相同 custId
的集合。对于那些不匹配任何分支的文档,holidays
字段将包含一个空数组。
如果您只想 return 具有匹配分支的文档,请匹配大小,例如:
holidays:{$not:{$size:0}}
另请注意,将 $match: { holidayStatus: "PROCESSED" }
放在 $lookup
之前将避免查询分支集合以查找将被删除的文档,这可能会提高性能。