【问题标题】:match query on two collections两个集合上的匹配查询
【发布时间】:2019-01-18 18:53:45
【问题描述】:

我有两个集合,一个是员工,另一个是工资,我们有一个员工 ID 作为从工资到员工集合的参考。我想要一个查询,它可以为工资集合中存在工资的所有员工提供工资详细信息,而工资不存在的员工将返回零工资。

简单来说,我需要在 mongodb 中进行右外连接。 请帮帮我。

提前致谢。

【问题讨论】:

  • "show me the code" .... 先显示你尝试过的查询。
  • 我首先确实找到了关于员工的查询,然后找到了关于薪水的查询,然后使用 for 循环进行迭代
  • 在这种情况下结果即将到来,但我认为这不是好的解决方案

标签: mongodb mongoose


【解决方案1】:
//Employee Documents
/* 1 */
{
    "_id" : ObjectId("5c41aaa91d0b034e617effc0"),
    "emp_id" : 1
}

/* 2 */
{
    "_id" : ObjectId("5c41aaec1d0b034e617f0001"),
    "emp_id" : 2
}

/* 3 */
{
    "_id" : ObjectId("5c41aaf31d0b034e617f0009"),
    "emp_id" : 3
}

//Salary Documents:
{
    "_id" : ObjectId("5c41aac01d0b034e617effd4"),
    "emp_id" : 1,
    "salary" : 1000
}
**//Query**
db.employee.aggregate([
    {
        $lookup:{
            from: "salary",
            localField: "emp_id", //reference of employee collection
            foreignField: "emp_id",  //reference of salary collection
            as: "sal"
         }
    },{
       $unwind: {
             path: "$sal",
            preserveNullAndEmptyArrays: true //will return null if salary does not exist
        }
      },{
         $project:{
             emp_id: 1,
             salary:  { $ifNull: [ "$sal.salary", 0 ] } //will set to 0 if salary does not exist
             }  
       }]);

//Output
/* 1 */
{
    "_id" : ObjectId("5c41aaa91d0b034e617effc0"),
    "emp_id" : 1,
    "salary" : 1000
}

/* 2 */
{
    "_id" : ObjectId("5c41aaec1d0b034e617f0001"),
    "emp_id" : 2,
    "salary" : 0.0
}

/* 3 */
{
    "_id" : ObjectId("5c41aaf31d0b034e617f0009"),
    "emp_id" : 3,
    "salary" : 0.0
}

【讨论】:

  • @mks 试试上面的代码,我已经创建了员工和薪水的示例文档,您可以在发布的解决方案顶部找到它们,我尝试了您期望的查询跨度>
  • 感谢您的回复。因为员工收款不是指工资,而是指员工工资。所以在这种情况下,“参数必须是聚合管道运算符”错误来了
  • 下面是工资模式 var Salary=mongoose.Schema({ employee_id:[{ type: Schema.Types.ObjectId, ref: 'Employees' }]
  • 请分享员工和薪水的示例架构
  • 工资模式我已经分享给你了,它指的是员工表的_id。员工模式是 var Employee=mongoose.Schema({ first_name:String, middle_name:String, last_name:String, employee_id:String"
猜你喜欢
  • 2018-07-01
  • 2021-09-27
  • 2020-05-31
  • 2014-02-23
  • 2016-09-27
  • 2012-06-05
  • 2013-01-30
  • 2012-05-11
  • 1970-01-01
相关资源
最近更新 更多