Mongodb的安装
64位系统-安装MongoDB6.0.4版本
---安装
---配置环境变量 D:\mgdb\bin
---下载Mongodb Shell 拖到 D:\mgdb
---配置环境变量D:\mgdb\mongosh-1.7.1-win32-x64\bin
---再打开一个cmd窗口
--输入mongosh 出现:
![](https://img-blog.csdnimg.cn/271e8997478e40d9b88861e403a1a754.png)
成功
4.x版本后MongoDB默认写入系统服务 |
4.x版本后MongoDB默认写入系统服务
- MongoDB是一个NoSQL的数据库
- MongoDB是一款文档型数据库
- 数据库指的就是一个存储数据的仓库
数据库可以使我们完成对数据的持久化的操作
- MongoDB数据库中存储的数据的基本单位就是文档,
MongoDB中存储的就是文档,所谓文档其实就是一个“JSON”
- MongoDB中的“JSON”我们称为BSON,比普通的JSON的功能要更加的强大
- MongoDB数据库使用的是JavaScript进行操作的,在MongoDB含有一个对ES标准实现的引擎,
在MongoDB中所有ES中的语法中都可以使用
三个概念 |
三个概念
· 数据库(database)
--数据库是一个仓库,在仓库中可以存放多个集合。
·集合(collection)
--集合是类似于一个数组,在集合中可以存放文档。
·文档(document)
--文档数据库中最小的单位,我们储存和操作的内容
就是文档。
一个数据库服务器里可以有多个数据库,一个数据库里可以有多个集合,一个集合里可以放多个文档
![](https://img-blog.csdnimg.cn/89f03b256c1d4294a7c85625c71af4c3.png)
基本概念&基本指令&数据库的CRUD操作 |
基本概念&基本指令&数据库的CRUD操作
---基本概念
数据库(database)
集合(collection)
文档(document)
-在MongoDB中,数据库和集合都不需要手动创建,
当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数 据库和集合。
---基本指令
show dbs
show database
- 显示当前所有数据库
use 数据库名
- 进入到指定的数据库中
db
- db表示的是当前所在数据库
show collections
- 显示数据库中所有的集合
---数据库的CRUD(增删改查)的操作
-- 向数据库中插入文档
db.<collection集合名>.insert(doc);
- 向集合中插入一个文档
- 例子:向test数据库中stus集合中插入一个新的学生对象
{name:"孙悟空",age:18,gender:"男"}
db.stus.insert({name:"孙悟空",age:18,gender:"男"});
![](https://img-blog.csdnimg.cn/b88f376920c148a9a5df00143dd1c4c8.png)
db.<collection>.find();
- 查询当前集合中的所有文档
db.stus.find()
![](https://img-blog.csdnimg.cn/e0f7f52fc4e7456f8ce5c3eaf9c05582.png)
向数据库里插入文档 |
向数据库里插入文档
db.<collection>.insert()
- 向集合中插入一个或多个文档
- 当我们向集合中插入文档是,如果没有给文档指定_id值,则数据库会自动为文档添加_id(该属性用来作为文档的唯一标识)
- _id我们可以自己指定,如果我们指定了数据库就不会再添加了,如果自己指定_id也必须确保它的唯一性
例子:
db.stus.insert([
{name:"沙和尚",age:38,gender:"男"},
{name:"白骨精",age:16,gender:"女"},
{name:"蜘蛛精",age:14,gender:"女"},
]);
db.<collection>.insertOne()
- 插入一个文档对象
db.<collection>.insertMany()
- 插入多个文档对象
查询文档 |
查询文档
db.<collection>.find()
- find()用来查询集合中所有的符合条件的文档
- find()可以接收一个对象作为条件参数
{} 表示查询集合中所有的文档
{属性:值} 查询属性是指定值的文档
- find()返回的是一个数组
例子:
查询stus集合中_id值为hello的文档
db.stus.find({_id:"hello"});
查询stus集合中age值为16,名字为白骨精的文档
db.stus.find({age:16,name:"白骨精"});
db.<collection>.findOne()
- 用来查询集合中符合条件的第一个文档
- findOne ()返回的是一个文档对象
db.<collection>.find({}).count()
- 查询所有结果的数量
修改文档 |
修改文档
db.<collection>.update(查询条件,新对象)
- update()默认情况下会使用新对象来代替旧对象
db.stus.update({name:"沙和尚"},{age:28});
- 如果要修改指定的属性,而不是替换需要使用“修改操作符”来完成修改
$set 可以用来修改文档中的指定属性
$unset 可以用来删除文档的指定属性
- update()默认只会修改一个
db.<collection>.updateMany()
- 同时修改多个符合条件的文档
db.<collection>.updateOne()
- 修改一个个符合条件的文档
db.<collection>.replaceOne()
- 替换一个符合条件的文档
例子:
在集合stus中name为沙和尚的文档address属性修改为流沙河,gender属性修改为男
db.stus.update(
{name :"沙和尚"},
{$set:{
gender:"男",
address:"流沙河"
}}
);
删除集合stus中name为沙和尚的文档
address属性(address属性值为1也行)
db.stus.update(
{name :"沙和尚"},
{$unset:{
gender:"男",
address:"流沙河"
}}
);
给集合stus中name为沙猪八戒的文档添加address属性为高老庄(默认只其中改一个文档)
db.stus.update(
{name :"猪八戒"},
{$set:{
address:"高老庄"
}}
);
给集合stus中
所有name为沙猪八戒的文档修改address属性为云栈洞
db.stus.updateMany(
{name :"猪八戒"},
{$set:{
address:"云栈洞"
}}
);
或
db.stus.update(
{name :"猪八戒"},
{$set:{
address:"云栈洞"
}},
{
multi: true
}
);
db.<collection>.updateMany()
- 同时修改多个符合条件的文档
db.<collection>.updateMany()
- 修改一个符合条件的文档
删除文档 |
删除文档
db.<collection>.remove()
- 删除符合条件的所有文档(默认条件下删除多个)
如果remove()第二个参数传递一个true,则只会删除一个
db.<collection>.deleteOne()
db.<collection>.deleteMany()
- remove()可以根据条件来删除文档,传递的条件的方式和find()一样
db.<collection>.drop()
(如果最后一个集合没了,数据库也没了。。。)
- 删除集合
db.dropDatabase()
-删除数据库
数据库的软删除和硬删除 |
数据库的软删除和硬删除
- 数据库的软删除是在记录后加字段的值代表数据是否可见
- 数据库的硬删除表示数据删除是真正意义上的删除
练习1 |
练习1
//1.进入my_test数据库
use my_test
//2.向数据库的user集合中插入一个文档
db.users.insert({
username:"sunwukong"
});
//3.查询user集合中的文档
db.users.find();
//4.向数据库的user集合中插入一个文档
db.users.insert({
username:"zhubajie"
});
//5.查询数据库user集合中的文档
db.users.find();
//6.统计数据库user集合中的文档数量
db.users.find().count();
//7.查询数据库user集合中username为sunwukong的文档
db.users.find({username:"sunwukong"});
//8.向数据库user集合中的username为sunwukong的文档,添加一个address属性,属性值为huaguoshan
db.users.update({username:"sunwukong"},{$set:{address:"huaguoshan"}});
//9.使用{username:"tangseng"} 替换 username 为 zhubajie的文档
db.users.replaceOne({username:"zhubajie"},{username:"tangseng"});
//10.删除username为sunwukong的文档的address属性
db.users.update({username:"sunwukong"},{$unset:{address:1}});
//11.向username为sunwukong的文档中,添加一个hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}
//MongoDB的文档的属性值也可以是一个文档,当一个文档的属性值是一个文档时,我们称这个文档叫做 内嵌文档
db.users.update({username:"sunwukong"},{$set:{hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}}});
db.users.find();
//12.向username为tangseng的文档中,添加一个hobby:{movies:["A Chinese Odyssey","King of comedy"]}
db.users.update({username:"tangseng"},{$set:{hobby:{movies:["A Chinese Odyssey","King of comedy"]}}})
//13.查询喜欢电影hero的文档
//MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过.的形式来匹配
//如果要通过内嵌文档来对文档进行查询,此时属性名必须使用引号
db.users.find({'hobby.movies':"hero"});
//14.向tangseng中添加一个新的电影Interstellar
//$push 用于向数组中添加一个新的元素
//$addToSet 向数组中添加一个新元素 , 如果数组中已经存在了该元素,则不会添加
db.users.update({username:"tangseng"},{$push:{"hobby.movies":"Interstellar"}});
db.users.update({username:"tangseng"},{$addToSet:{"hobby.movies":"Interstellar"}});
db.users.find();
//15.删除喜欢beijing的用户
db.users.remove({"hobby.cities":"beijing"});
//16.删除user集合
db.users.remove({});
db.users.drop();
show dbs;
//17.向numbers中插入20000条数据
//7.2s
for(var i=1 ; i<=20000 ; i++){
db.numbers.insert({num:i});
}
db.numbers.find()
db.numbers.remove({});
//0.4s 先放入数组中,再插入数组,效率大大提高
var arr = [];
for(var i=1 ; i<=20000 ; i++){
arr.push({num:i});
}
db.numbers.insert(arr);
练习2 |
练习2
//18.查询numbers中num为500的文档
db.numbers.find({num:500})
//19.查询numbers中num大于5000的文档
db.numbers.find({num:{$gt:5000}});
db.numbers.find({num:{$eq:5000}});
//20.查询numbers中num小于30的文档
db.numbers.find({num:{$lt:30}});
//21.查询numbers中num大于40小于50的文档
db.numbers.find({num:{$gt:40 , $lt:50}});
//22.查询numbers中num大于19996的文档
db.numbers.find({num:{$gt:19996}});
//23.查看numbers集合中的前10条数据
db.numbers.find({num:{$lte:10}});
//limit()设置显示数据的上限
db.numbers.find().limit(10);
//在开发时,我们绝对不会执行不带条件的查询
db.numbers.find();
//24.查看numbers集合中的第11条到20条数据
/*
分页 每页显示10条
1-10 0
11-20 10
21-30 20
。。。
skip((页码-1) * 每页显示的条数).limit(每页显示的条数);
skip()用于跳过指定数量的数据
MongoDB会自动调整skip和limit的位置
*/
db.numbers.find().skip(10).limit(10);
//25.查看numbers集合中的第21条到30条数据
db.numbers.find().skip(20).limit(10);
db.numbers.find().limit(10).skip(10);
练习3 |
练习3
//26.将dept和emp集合导入到数据库中
db.dept.find()
db.emp.find()
//27.查询工资小于2000的员工
db.emp.find({sal:{$lt:2000}});
//28.查询工资在1000-2000之间的员工
db.emp.find({sal:{$lt:2000 , $gt:1000}});
//29.查询工资小于1000或大于2500的员工
db.emp.find({$or:[{sal:{$lt:1000}} , {sal:{$gt:2500}}]});
//30.查询财务部的所有员工
//(depno)
var depno = db.dept.findOne({dname:"财务部"}).deptno;
db.emp.find({depno:depno});
//31.查询销售部的所有员工
var depno = db.dept.findOne({dname:"销售部"}).deptno;
db.emp.find({depno:depno});
//32.查询所有mgr为7698的所有员工
db.emp.find({mgr:7698})
//33.为所有薪资低于1000的员工增加工资400元
db.emp.updateMany({sal:{$lte:1000}} , {$inc:{sal:400}});
db.emp.find()
文档间的关系之一对一 |
文档间的关系之一对一
-- 内嵌文档
-- 夫妻关系
例子:
db.wife.insert([
{
name:"黄蓉",
age: 26,
handsband:{
name:"郭靖",
age: 38
}
},
{
name: "小兰",
age: 16,
handsband:{
name: "新一",
age: 16
}
}
]);
/*
可以看到一个妻子是对应一个丈夫的,这是使用内嵌文档来实现的。
*/
Mongodb jc
64位系统-安装MongoDB6.0.4版本
---安装
---配置环境变量 D:\mgdb\bin
---下载Mongodb Shell 拖到 D:\mgdb
---配置环境变量D:\mgdb\mongosh-1.7.1-win32-x64\bin
---再打开一个cmd窗口
--输入mongosh 出现:
![](https://img-blog.csdnimg.cn/a224638e737f4b1692c16cdbcea149a8.png)
成功
4.x版本后MongoDB默认写入系统服务 |
4.x版本后MongoDB默认写入系统服务
- MongoDB是一个NoSQL的数据库
- MongoDB是一款文档型数据库
- 数据库指的就是一个存储数据的仓库
数据库可以使我们完成对数据的持久化的操作
- MongoDB数据库中存储的数据的基本单位就是文档,
MongoDB中存储的就是文档,所谓文档其实就是一个“JSON”
- MongoDB中的“JSON”我们称为BSON,比普通的JSON的功能要更加的强大
- MongoDB数据库使用的是JavaScript进行操作的,在MongoDB含有一个对ES标准实现的引擎,
在MongoDB中所有ES中的语法中都可以使用
三个MongoDB数据库概念 |
三个概念
· 数据库(database)
--数据库是一个仓库,在仓库中可以存放多个集合。
·集合(collection)
--集合是类似于一个数组,在集合中可以存放文档。
·文档(document)
--文档数据库中最小的单位,我们储存和操作的内容
就是文档。
一个数据库服务器里可以有多个数据库,一个数据库里可以有多个集合,一个集合里可以放多个文档
![](https://img-blog.csdnimg.cn/29a5962abc354b86b91cab38e08977d0.png)
基本概念&基本指令&数据库的CRUD操作 |
基本概念&基本指令&数据库的CRUD操作
---基本概念
数据库(database)
集合(collection)
文档(document)
-在MongoDB中,数据库和集合都不需要手动创建,
当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数 据库和集合。
---基本指令
show dbs
show database
- 显示当前所有数据库
use 数据库名
- 进入到指定的数据库中
db
- db表示的是当前所在数据库
show collections
- 显示数据库中所有的集合
---数据库的CRUD(增删改查)的操作
-- 向数据库中插入文档
db.<collection集合名>.insert(doc);
- 向集合中插入一个文档
- 例子:向test数据库中stus集合中插入一个新的学生对象
{name:"孙悟空",age:18,gender:"男"}
db.stus.insert({name:"孙悟空",age:18,gender:"男"});
![](https://img-blog.csdnimg.cn/91f3909c40454db5a89598c3e8ce1d89.png)
db.<collection>.find();
- 查询当前集合中的所有文档
db.stus.find()
![](https://img-blog.csdnimg.cn/dfde6952f4f24bd4bf04654512c42349.png)
向数据库里插入文档 |
向数据库里插入文档
db.<collection>.insert()
- 向集合中插入一个或多个文档
- 当我们向集合中插入文档是,如果没有给文档指定_id值,则数据库会自动为文档添加_id(该属性用来作为文档的唯一标识)
- _id我们可以自己指定,如果我们指定了数据库就不会再添加了,如果自己指定_id也必须确保它的唯一性
例子:
db.stus.insert([
{name:"沙和尚",age:38,gender:"男"},
{name:"白骨精",age:16,gender:"女"},
{name:"蜘蛛精",age:14,gender:"女"},
]);
db.<collection>.insertOne()
- 插入一个文档对象
db.<collection>.insertMany()
- 插入多个文档对象
查询文档 |
查询文档
db.<collection>.find()
- find()用来查询集合中所有的符合条件的文档
- find()可以接收一个对象作为条件参数
{} 表示查询集合中所有的文档
{属性:值} 查询属性是指定值的文档
- find()返回的是一个数组
例子:
查询stus集合中_id值为hello的文档
db.stus.find({_id:"hello"});
查询stus集合中age值为16,名字为白骨精的文档
db.stus.find({age:16,name:"白骨精"});
db.<collection>.findOne()
- 用来查询集合中符合条件的第一个文档
- findOne ()返回的是一个文档对象
db.<collection>.find({}).count()
- 查询所有结果的数量
修改文档 |
修改文档
db.<collection>.update(查询条件,新对象)
- update()默认情况下会使用新对象来代替旧对象
db.stus.update({name:"沙和尚"},{age:28});
- 如果要修改指定的属性,而不是替换需要使用“修改操作符”来完成修改
$set 可以用来修改文档中的指定属性
$unset 可以用来删除文档的指定属性
- update()默认只会修改一个
db.<collection>.updateMany()
- 同时修改多个符合条件的文档
db.<collection>.updateOne()
- 修改一个个符合条件的文档
db.<collection>.replaceOne()
- 替换一个符合条件的文档
例子:
在集合stus中name为沙和尚的文档address属性修改为流沙河,gender属性修改为男
db.stus.update(
{name :"沙和尚"},
{$set:{
gender:"男",
address:"流沙河"
}}
);
删除集合stus中name为沙和尚的文档
address属性(address属性值为1也行)
db.stus.update(
{name :"沙和尚"},
{$unset:{
gender:"男",
address:"流沙河"
}}
);
给集合stus中name为沙猪八戒的文档添加address属性为高老庄(默认只其中改一个文档)
db.stus.update(
{name :"猪八戒"},
{$set:{
address:"高老庄"
}}
);
给集合stus中
所有name为沙猪八戒的文档修改address属性为云栈洞
db.stus.updateMany(
{name :"猪八戒"},
{$set:{
address:"云栈洞"
}}
);
或
db.stus.update(
{name :"猪八戒"},
{$set:{
address:"云栈洞"
}},
{
multi: true
}
);
db.<collection>.updateMany()
- 同时修改多个符合条件的文档
db.<collection>.updateMany()
- 修改一个符合条件的文档
删除文档 |
删除文档
db.<collection>.remove()
- 删除符合条件的所有文档(默认条件下删除多个)
如果remove()第二个参数传递一个true,则只会删除一个
db.<collection>.deleteOne()
db.<collection>.deleteMany()
- remove()可以根据条件来删除文档,传递的条件的方式和find()一样
db.<collection>.drop()
(如果最后一个集合没了,数据库也没了。。。)
- 删除集合
db.dropDatabase()
-删除数据库
数据库的软删除和硬删除 |
数据库的软删除和硬删除
- 数据库的软删除是在记录后加字段的值代表数据是否可见
- 数据库的硬删除表示数据删除是真正意义上的删除
练习1 |
练习1
//1.进入my_test数据库
use my_test
//2.向数据库的user集合中插入一个文档
db.users.insert({
username:"sunwukong"
});
//3.查询user集合中的文档
db.users.find();
//4.向数据库的user集合中插入一个文档
db.users.insert({
username:"zhubajie"
});
//5.查询数据库user集合中的文档
db.users.find();
//6.统计数据库user集合中的文档数量
db.users.find().count();
//7.查询数据库user集合中username为sunwukong的文档
db.users.find({username:"sunwukong"});
//8.向数据库user集合中的username为sunwukong的文档,添加一个address属性,属性值为huaguoshan
db.users.update({username:"sunwukong"},{$set:{address:"huaguoshan"}});
//9.使用{username:"tangseng"} 替换 username 为 zhubajie的文档
db.users.replaceOne({username:"zhubajie"},{username:"tangseng"});
//10.删除username为sunwukong的文档的address属性
db.users.update({username:"sunwukong"},{$unset:{address:1}});
//11.向username为sunwukong的文档中,添加一个hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}
//MongoDB的文档的属性值也可以是一个文档,当一个文档的属性值是一个文档时,我们称这个文档叫做 内嵌文档
db.users.update({username:"sunwukong"},{$set:{hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}}});
db.users.find();
//12.向username为tangseng的文档中,添加一个hobby:{movies:["A Chinese Odyssey","King of comedy"]}
db.users.update({username:"tangseng"},{$set:{hobby:{movies:["A Chinese Odyssey","King of comedy"]}}})
//13.查询喜欢电影hero的文档
//MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过.的形式来匹配
//如果要通过内嵌文档来对文档进行查询,此时属性名必须使用引号
db.users.find({'hobby.movies':"hero"});
//14.向tangseng中添加一个新的电影Interstellar
//$push 用于向数组中添加一个新的元素
//$addToSet 向数组中添加一个新元素 , 如果数组中已经存在了该元素,则不会添加
db.users.update({username:"tangseng"},{$push:{"hobby.movies":"Interstellar"}});
db.users.update({username:"tangseng"},{$addToSet:{"hobby.movies":"Interstellar"}});
db.users.find();
//15.删除喜欢beijing的用户
db.users.remove({"hobby.cities":"beijing"});
//16.删除user集合
db.users.remove({});
db.users.drop();
show dbs;
//17.向numbers中插入20000条数据
//7.2s
for(var i=1 ; i<=20000 ; i++){
db.numbers.insert({num:i});
}
db.numbers.find()
db.numbers.remove({});
//0.4s 先放入数组中,再插入数组,效率大大提高
var arr = [];
for(var i=1 ; i<=20000 ; i++){
arr.push({num:i});
}
db.numbers.insert(arr);
练习2 |
练习2
//18.查询numbers中num为500的文档
db.numbers.find({num:500})
//19.查询numbers中num大于5000的文档
db.numbers.find({num:{$gt:5000}});
db.numbers.find({num:{$eq:5000}});
//20.查询numbers中num小于30的文档
db.numbers.find({num:{$lt:30}});
//21.查询numbers中num大于40小于50的文档
db.numbers.find({num:{$gt:40 , $lt:50}});
//22.查询numbers中num大于19996的文档
db.numbers.find({num:{$gt:19996}});
//23.查看numbers集合中的前10条数据
db.numbers.find({num:{$lte:10}});
//limit()设置显示数据的上限
db.numbers.find().limit(10);
//在开发时,我们绝对不会执行不带条件的查询
db.numbers.find();
//24.查看numbers集合中的第11条到20条数据
/*
分页 每页显示10条
1-10 0
11-20 10
21-30 20
。。。
skip((页码-1) * 每页显示的条数).limit(每页显示的条数);
skip()用于跳过指定数量的数据
MongoDB会自动调整skip和limit的位置
*/
db.numbers.find().skip(10).limit(10);
//25.查看numbers集合中的第21条到30条数据
db.numbers.find().skip(20).limit(10);
db.numbers.find().limit(10).skip(10);
练习3 |
练习3
//26.将dept和emp集合导入到数据库中
db.dept.find()
db.emp.find()
//27.查询工资小于2000的员工
db.emp.find({sal:{$lt:2000}});
//28.查询工资在1000-2000之间的员工
db.emp.find({sal:{$lt:2000 , $gt:1000}});
//29.查询工资小于1000或大于2500的员工
db.emp.find({$or:[{sal:{$lt:1000}} , {sal:{$gt:2500}}]});
//30.查询财务部的所有员工
//(depno)
var depno = db.dept.findOne({dname:"财务部"}).deptno;
db.emp.find({depno:depno});
//31.查询销售部的所有员工
var depno = db.dept.findOne({dname:"销售部"}).deptno;
db.emp.find({depno:depno});
//32.查询所有mgr为7698的所有员工
db.emp.find({mgr:7698})
//33.为所有薪资低于1000的员工增加工资400元
db.emp.updateMany({sal:{$lte:1000}} , {$inc:{sal:400}});
db.emp.find()
文档间的关系之一对一 |
文档间的关系之一对一
-- 内嵌文档
-- 夫妻关系
例子:
db.wife.insert([
{
name:"黄蓉",
age: 26,
handsband:{
name:"郭靖",
age: 38
}
},
{
name: "小兰",
age: 16,
handsband:{
name: "新一",
age: 16
}
}
]);
/*
可以看到一个妻子是对应一个丈夫的,这是使用内嵌文档来实现的。
*/
文档间的关系之一对多 |
文档间的关系之一对多
-- 父母 - 孩子
-- 文章 - 评论
-- 内嵌文档也可以实现,就是一个文档内嵌多个文档,不过比较繁琐
-- 用户一个文档,订单一个文档,在使用的时候再一一对应
// 第一句是创建了两个用户, 分别是花木兰和诸葛亮
db.users.insert([{name:"花木兰"}, {name:"诸葛亮"}]);
// 这一句是查询用户内容, 这是需要知道用户的_id,从而在第三句加入
db.users.find();
// 这是生成了一个订单,并且user_id存储的是花木兰的id
db.orders.insert({list_name:["配马", "鞍鞯"], user_id: ObjectId("61374eac77393663e2de9bd3")})
// 再生成了一个订单,并且user_id存储的是花木兰的id
db.orders.insert({list_name:["蜜糖", "男装"], user_id: ObjectId("61374eac77393663e2de9bd3")})
// 在users里查找到 花木兰 这个用户的id,并将其存储起来
let userId = db.users.findOne({name:"花木兰"})._id;
// 使用id来查找
db.orders.find({user_id: userId});
文档间的关系之多对多 |
文档间的关系之多对多
-
一对一
- 一对多
db.teas.insert([{name:"诸葛亮"}, {name:"龟仙人"}, {name:"唐僧"}]);
db.teas.find();
db.stus.insert([
{
name: "孙悟空",
// 插入的是 龟仙人和唐僧的id
teas_id:
[ObjectId("6137552877393663e2de9bdb"),ObjectId("6137552877393663e2de9bdc")]
},
{
name: "刘禅",
// 插入的是 诸葛亮和龟仙人的id
teas_id:[ObjectId("6137552877393663e2de9bda"),ObjectId("6137552877393663e2de9bdb")]
}
]);
db.stus.find();
如果有帮助,点个赞吧~