【发布时间】:2021-02-04 06:50:17
【问题描述】:
我有两个集合 Bill 和 Employee。账单包含有关每月学生账单的信息,员工包含在学校工作的所有类型的人(会计、教师、维护等)。
Bill 有 billVerifyBy 和 classteacher 字段,它们指向员工的记录。
收单
{
"_id": ObjectId("ab12dns..."), //mongoid
"studentname": "demoUser",
"class": { "section": "A"},
"billVerifiedBy": "121212",
"classteacher": "134239",
}
员工收藏
{
"_id": ObjectId("121212"), // random number
"name": "Darn Morphy",
"department": "Accounts",
"email": "dantest@test.com",
}
{
"_id": ObjectId("134239"),
"name": "Derreck",
"department": "Faculty",
"email": "derrect145@test.com",
}
我需要检索与特定账单相关的帐户和教师信息。我正在使用 Mongodb 查找来获取信息。但是,我必须查找同一个表两次,因为 billVerifiedBy 和 classteacher 属于下面给出的同一个 Employee 表。
db.bill.aggregate([
{
$lookup: {"from": "employee", "localField": "billVerifiedBy", "foreignField": "_id", "as": "accounts"}},
},
{
$lookup: {"from": "employee", "localField": "classteacher", "foreignField": "_id", "as": "faculty"}},
},
{
$project: {
"studentname": 1,
"class": 1,
"verifiedUser": "$accounts.name",
"verifiedByEmail":"$accounts.email",
"facultyName": "$faculty.name",
"facultyEmail": "$faculty.email"
}
}
]
我不知道这是否是在单个 Employee 集合中安排 Accounts 和 Faculty 信息的好方法。使用相同的集合查找两次是否正确。或者我应该创建单独的帐户和教师集合并使用它进行查找。请就性能方面提出最佳方法。
【问题讨论】:
-
您好,我认为查询没问题。如果没有必要,不建议加入 MongoDB 本身,但我认为在你的情况下这是有道理的。
-
感谢您的回复。我真的不认为使用 NoSQL DB 会阻止 100% 的加入。总是需要某种程度的标准化。我只是好奇是否有其他方法可以防止多次加入同一张表。
标签: sql mongodb join mongodb-query