gpt4 book ai didi

mongodb - 在mongodb中查询不同的多级关系

转载 作者:可可西里 更新时间:2023-11-01 10:48:43 30 4
gpt4 key购买 nike

模拟示例。两个 mongodb 集合,departmentsemployees:

部门

{ _id: '101' }
{ _id: '102', parent: '101' }
{ _id: '103', parent: '101' }
{ _id: '104', parent: '103' }

员工

{ _id: '201', department: '101' }
{ _id: '202', department: '102' }
{ _id: '203', department: '102' }
{ _id: '204', department: '103' }
{ _id: '205', department: '104' }

如何查询一个部门或任何子部门中所有员工的列表(通过 department.parent 引用属性)?

所以对于上面的例子,查询:

  • 部门 101 应该给员工文件 201, 202, 203, 204, 205
  • 部门 102 应该给员工文件 202, 203, 204, 205
  • 部门 103 应该给员工文件 204, 205

如果无法查询部门树中“任意数量”的层级,那么给出“最多 N”层级结果的查询是完全可以接受的。

最佳答案

$lookup在 MongoDb 中对同一数据库中的未分片集合执行左外连接。

如果我们的集合之间有一层关系,那么我们可以 $lookup 对集合执行聚合。

假设我们在给定的样本集合中有一个级别的关系(比如一个部门到一个员工),那么聚合查询是

db.department.aggregate([
{
$lookup:
{
from: "employees",
localField: "_id",
foreignField: "department",
as: "result"
}
}
])

只取Department集合的_id进行聚合,不取父部门关系进行聚合

上面给出的样本集合的结果是

{
"_id" : "101",
"result" : [
{
"_id" : "201",
"department" : "101"
}
]
}
{
"_id" : "102",
"parent" : "101",
"result" : [
{
"_id" : "202",
"department" : "102"
},
{
"_id" : "203",
"department" : "102"
}
]
}
{
"_id" : "103",
"parent" : "101",
"result" : [
{
"_id" : "204",
"department" : "103"
}
]
}
{
"_id" : "104",
"parent" : "103",
"result" : [
{
"_id" : "205",
"department" : "104"
}
]
}

请注意,MongoDB 是一个 NoSQL 数据库,以这样一种方式设计我们的集合模式是一种很好的做法,即集合之间没有关系或关系很少。

关于mongodb - 在mongodb中查询不同的多级关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46233419/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com