MongoDB入门

Mongodb的安装

64位系统-安装MongoDB6.0.4版本
---安装
---配置环境变量 D:\mgdb\bin
    
---下载Mongodb Shell  拖到 D:\mgdb
---配置环境变量D:\mgdb\mongosh-1.7.1-win32-x64\bin
---再打开一个cmd窗口
      --输入mongosh  出现:
            
成功

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)
    --文档数据库中最小的单位,我们储存和操作的内容
就是文档。
一个数据库服务器里可以有多个数据库,一个数据库里可以有多个集合,一个集合里可以放多个文档

基本概念&基本指令&数据库的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:"男"});
         db.<collection>.find();
               - 查询当前集合中的所有文档
                  db.stus.find()
             

向数据库里插入文档

向数据库里插入文档
 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  出现:
            
成功

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)
    --文档数据库中最小的单位,我们储存和操作的内容
就是文档。
一个数据库服务器里可以有多个数据库,一个数据库里可以有多个集合,一个集合里可以放多个文档

基本概念&基本指令&数据库的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:"男"});
         db.<collection>.find();
               - 查询当前集合中的所有文档
                  db.stus.find()
             

向数据库里插入文档

向数据库里插入文档
 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();
如果有帮助,点个赞吧~
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值