其他分享
首页 > 其他分享> > MongDB- 文档对象之间的关系

MongDB- 文档对象之间的关系

作者:互联网

1. 文档对象之间的关系

  1. 一对一 (one TO one)
    - 例如: 夫妻 (一个丈夫 对应 一个妻子)
    - 在MongoDB中, 可以通过内嵌文档的形式来体现出一对一的关系

演示:
首先在 my_test数据库中创建一个集合, wifeAndHusband, 并向集合中插入数据

{
	name:"黄蓉",
	husband:{
		name:"郭靖"
	}
> db.wifeAndHusband.find().pretty()
{
        "_id" : ObjectId("6118eb8a47935623a0ff6300"),
        "name" : "黄蓉",
        "husband" : {
                "name" : "郭靖"
        }
}

一个文档对象一旦被嵌入到另一个文档对象中就绝不可能再被嵌入到其他文档对象中,因此可以体现出一对一的关系


  1. 一对多 (one TO many) / 多对一 (many TO one) 例如 :
    - 父母 To 孩子
    - 用户 To 订单
    - 文章 To 评论

具体实现:
使用 用户 to 订单 距离

  1. 创建一个集合user, 插入以下数据
> db.user.insertMany([{name:'刘俊熙'},{name:'龙猫不热'}])
> db.user.find()

在这里插入图片描述

  1. 创建订单集合 order,插入数据
db.order.insertOne(
    {
    // 用户 刘俊熙对应的订单
        list:['苹果','香蕉','西瓜']
    }
)

但是这样还不能体现该订单是对应 刘俊熙数据的, 如何处理?

db.order.insertOne(
    {
        list:['苹果','香蕉','西瓜'],
        user_id:ObjectId("6118f452928b3b5423acb15f")
    }
)

db.order.find()

在这里插入图片描述
通过唯一性的_id作为参照插入到另一个文档对象中, 由此实现 一对多的关系

查询一对多

要求: 查询刘俊熙的订单

db.user.findOne({name:"刘俊熙"})._id

在这里插入图片描述

db.order.find({user_id:db.user.findOne({name:"刘俊熙"})._id})

在这里插入图片描述


  1. 多对多 (manyTO many)

例如: 在teachers集合中插入以下数据

db.teachers.insert([
    {name:"洪七公"},
    {name:"黄药师"},
    {name:"龟仙人"}

    ]);

db.teachers.find()

那么,要怎么体现出多对多的关系呢?

db.stus.insert([
// 如果, 郭靖既是洪七公的徒弟又是黄药师的徒弟,要怎么在数据库中体现呢? 
    {name:"郭靖"}
])

在这里插入图片描述

体现

db.stus.insert([
    {
     name:"郭靖",
     tech_id:[
     // 添加洪七公的 _id 作为tech_id 的其中一条数据
        ObjectId("61192a9b928b3b5423acb166"),
     // 再把洪七公的 _id 也添加进来
        ObjectId("61192a9b928b3b5423acb167")
     ]
    }
])

运行
在这里插入图片描述
这时候就能体现出 多对多的关系了

标签:MongDB,对象,db,文档,user,刘俊熙,id,name
来源: https://www.cnblogs.com/long-mao-bu-re/p/15145561.html