mongodb - 如何在 MongoDB 聚合中添加来自不同集合的多个 $match 条件
问题描述
我有 2 个不同的 MongoDB 集合 -包含两个共同的部门的员工和部门。我想加入这两个集合并从两个集合中添加多个 $match 条件。
雇员:
{
Empid: 001
Name: "John"
Age: 41
Location: "Belfast"
deptid: "D101"
}
部门:
{
deptID: "D101"
deptNM: "HR"
deptPr: "O"
}
询问:
db.getCollection('Employees').aggregate([
{ $match:{
deptNM: "HR",
Age : {$gt: 40}
}
},
{ $lookup: {
from: "Dept",
localField: "deptid",
foreignField: "deptID",
as: "HR EMP"
}
},
{ $project: {
Empid: 1, Name: 1, Location: 1, deptNM: 1, deptPr: 1
}
}
])
上面的查询不起作用,还有其他方法吗?
解决方案
您的查询有几个问题 - 您不能在阶段deptNM: "HR"
之前过滤字段,因为字段不是来自员工集合,请尝试以下查询:$lookup
deptNM
db.getCollection('Employees').aggregate([
/** filter employees to retain whose age > 40 */
{
$match: {
Age: { $gt: 40 }
}
},
/** Get their respective dept */
{
$lookup: {
from: "Dept",
localField: "deptid",
foreignField: "deptID",
as: "HR_EMP"
}
},
/** As lookup's field HR_EMP is an array unwind it to get it into object */
{ $unwind: '$HR_EMP' },
/** filter depts for HR */
{ $match: { 'HR_EMP.deptNM': "HR" } },
/** Project only needed fields or transform fields */
{
$project: {
Empid: 1, Name: 1, Location: 1, deptNM: '$HR_EMP.deptNM', deptPr: '$HR_EMP.deptPr'
}
}])
测试: MongoDB-游乐场
推荐阅读
- python - BGR8原始图像转换为numpy python
- c++ - 如何区分用户是 root 还是用户是 sudo'd
- email - 使用 javax.mail 在端口 25 上发送 SSL=true 的邮件失败
- image-processing - Keras 中的 2D 局部最大搜索和求和层
- winforms - PowerShell Winforms 文本框更新其他输入但可覆盖
- google-apps-script - 在另一个函数完成更改 Google 表格后调用一个函数
- android - 在 gridview 中使用图像数组的应用程序非常慢
- javascript - 使用 POST 表单发送 Blob 对象
- python - 恢复张量流模型
- powershell - 如果基于 DNS 名称解析的逻辑导致 Powershell