在MongoDB中创建集合之间的关系

时间:2017-05-18 16:59:54

标签: mongodb database

我是MongoDB的新手,我正在创建一个数据库来记录学生和学生在大学里所做的课程。 有三个名为Student,Subject和Lecturer的集合。 学生集合包含studentId,name,dob,email,year。 Subject集合包含subjectId,subjectName,credits Lecturer集合包含讲师,讲座名称,speciliazation,contactNo,电子邮件。 学生和学生集合之间的关系很多。 在Subject和Lecturer集合之间存在一对一的关系。 我需要将subjectId添加到学生集合中,并将讲师添加到主题集合中。 任何人都可以告诉我如何在集合之间创建外键关系?

1 个答案:

答案 0 :(得分:4)

您可以使用MongoDB DBRef,其中文档包含来自不同集合的引用。

DBRefs中有三个字段 -

  • $ref - 此字段指定所引用文档的集合

  • $id - 此字段指定引用文档的_id字段

  • $db - 这是一个可选字段,包含引用文档所在的数据库名称

学生的文档示例 -

{
    "_id":ObjectId("53402597d852426020000002"),
    "subjects": [{
       "$ref": "SubjectCollection",
       "$id": ObjectId("534009e4d853427820000001"),
       "$db": "dbname"
    },{
       "$ref": "SubjectCollection",
       "$id": ObjectId("829009e4d856727320000007"),
       "$db": "dbname"
    }],
    "name": "Mukesh Saini",
    "dob": "01-01-1990",
    "email": "ms@gmail.com",
    "year": 2017
}

然后您可以按如下方式查询引用的文档 -

var student = db.studentsColl.findOne({"name":"Mukesh Saini"})
var dbRef = student.subjects[0]
db[dbRef.$ref].findOne({"_id":(dbRef.$id)})