【发布时间】:2018-05-30 03:27:36
【问题描述】:
我正在使用 MongoDB 和 HapiJs 我有 3 个 mongo db 集合如下:
companies: [
{_id: "autogeneratedId", name: "companyname1"},
{_id: "autogeneratedId", name: "companyname2"}
]
employees: [
{_id: "autogeneratedId", salary: 10000, employeename: "employeename1", "company_id": "_id of company"},
{_id: "autogeneratedId", salary: 50000, employeename: "employeename2", "company_id": "_id of company"},
{_id: "autogeneratedId", salary: 25000, employeename: "employeename3", "company_id": "_id of company"}
]
products: [
{_id: "autogeneratedId", price: 900, productname: "productname1", "company_id": "_id of company"},
{_id: "autogeneratedId", price: 400, productname: "productname2", "company_id": "_id of company"},
{_id: "autogeneratedId", price: 500, productname: "productname3", "company_id": "_id of company"}
]
我正在尝试从 companies 集合中获取公司列表。现在除了companies 的列表,我还想根据companies 集合的_id 从集合products 和employees 中获取每个相应公司的产品和员工列表。这是我正在尝试的代码
db.getCollection('companies').aggregate([
{
$lookup:
{
from: "employees",
localField: "_id",
foreignField: "company_id",
as: "employees_array"
}
},
{
$lookup:
{
from: "products",
localField: "_id",
foreignField: "company_id",
as: "products_array"
}
},
])
但由于某种原因,上面的代码在 products_array 和 employees_array 中返回了一个空数组。那么,谁能告诉我我在这里做错了什么?
此外,在employees_array 和 products_array 中,我只想获取基于员工薪水 >= 10000 和产品价格 >= 500 等条件的数据。那么我该如何实现呢?
【问题讨论】:
-
您能否编辑您的帖子并为 _id 和 company_id 插入实际值?
-
我的结构和值与 Alex P 的答案完全相同。预期结果也与 Alex P 在她的回答中描述的相同。但由于某种原因,我没有在
products_array和employees_array中得到结果。products和employees中的company_id是对companies的 mongodb 自动生成的_id字段的引用。
标签: node.js mongodb lookup hapijs