聚合查询返回空数组

时间:2021-03-26 06:22:18

标签: mongodb

我在 EmployeeDB 中有三个集合。

  1. 员工
{ 
    "user_id" : "EMP001", 
    "FirstName" : "Manoj", 
    "LastName" : "sharma", 
    "Status" : "0/1", 
    "CreateDate" : "1988-10-11T18:30:00.000Z"
}
  1. EmpContact
{ 
    "user_id" : "EMP001", 
    "Phone" : "9999999999", 
    "Email" : "xyz@gmail.com"
}
  1. 员工信息
{ 
    "user_id" : "EMP001", 
    "Gender" : "Male", 
    "Age" : NumberInt(20), 
    "Designation" : "manager", 
    "Salary" : "5000"
}

我需要将三个集合分组并显示所有字段。 我试过下面的代码,

db.Employee.aggregate([
        {$lookup: {from: "EmpContact",localField: "user_id",foreignField: "user_id",as: "contact"}},
        {$unwind:"$EmpContact"},
        {$lookup: {from: "EmpInfo",localField: "user_id",foreignField: "user_id",as: "empinfo"}},
        {$unwind:"$EmpInfo"},
        {
            $match:{user_id : "EMP001"}
        }
]).toArray();

但是我得到了一个空数组,请帮帮我...

1 个答案:

答案 0 :(得分:0)

问题来自您的 $unwind。 由于您在 contact 中将字段命名为 $lookup,因此字段 EmpContact 不存在。 第二个 unwind 的情况相同,EmpInfo 不存在但 empinfo 存在

这是完整的查询

db.Employee.aggregate([
  {
    $lookup: {
      from: "EmpContact",
      localField: "user_id",
      foreignField: "user_id",
      as: "contact"
    }
  },
  {
    $unwind: "$contact"
  },
  {
    $lookup: {
      from: "EmpContact",
      localField: "user_id",
      foreignField: "user_id",
      as: "empinfo"
    }
  },
  {
    $unwind: "$empinfo"
  },
  {
    $match: {
      user_id: "EMP001"
    }
  }
])

试试here