Mongodb 数据库的简单使用

Posted 我只想躺平

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb 数据库的简单使用相关的知识,希望对你有一定的参考价值。

一、数据库相关操作


1、创建数据库

    use 数据库名    #  切换到指定的数据库,当数据库不存在时,就表示创建这个数据库

    > use admin
    switched to db admin
    > db.auth("admin","123456")    #  用户账号和口令
    1

    > show dbs
    admin     0.000GB
    config    0.000GB
    local     0.000GB
    test      0.000GB

    > use ceshi              #  创建 数据库 
    switched to db ceshi

    > db                     #  显示现在使用的是哪个数据库
    ceshi

    > show dbs               #  数据库里面没有数据时,数据库查询时不显示
    admin     0.000GB
    config    0.000GB
    local     0.000GB
    test      0.000GB

    我们向 ceshi 这个数据库里面增加一个集合,再看看查看的情形
    > db.createCollection("class")
     "ok" : 1 

    > show dbs
    admin     0.000GB
    ceshi     0.000GB
    config    0.000GB
    local     0.000GB
    test      0.000GB         #  此时数据库查询时,ceshi 这个数据库才会显示

2、显示数据库

    show dbs 或者 show databases  
    > show dbs
    admin     0.000GB
    config    0.000GB
    local     0.000GB
    test      0.000GB

    > show databases
    admin     0.000GB
    config    0.000GB
    local     0.000GB
    test      0.000GB

3、 数据库信息查看

    > use test
    switched to db test

    > db.stats()
    
        "db" : "test",
        "collections" : 1,
        "views" : 0,
        "objects" : 1,
        "avgObjSize" : 41,
        "dataSize" : 41,
        "storageSize" : 20480,
        "numExtents" : 0,
        "indexes" : 1,
        "indexSize" : 20480,
        "scaleFactor" : 1,
        "fsUsedSize" : 2687488000,
        "fsTotalSize" : 53135798272,
        "ok" : 1
     

4、删除数据库

   # 删除数据库必须先切换到数据库下,然后使用数据库的内置函数进行删除

    > use ceshi
    switched to db ceshi

    > db
    ceshi

    > db.dropDatabase()
     "dropped" : "ceshi", "ok" : 1 

    > show dbs
    admin     0.000GB
    config    0.000GB
    local     0.000GB
    test      0.000GB

    # 温馨提示: 
    1、不同角色看见的数据库数量是不一样的,普通用户只能看见自己的数据库
    2、刚创建的数据库里面是没有数据的,此时查询时是无法看到的此数据库的

二、集合相关的操作


# Mongod 中的集合是一组文档的集,集合相当于关系型数据库中的表

1、创建集合
   创建集合两种方式: 显式创建 和 隐式创建

    > db.createCollection("games")      #  显式创建
     "ok" : 1 

    > db.info.insert("name":"tom")    #  隐式创建
    WriteResult( "nInserted" : 1 )

    > show collections                  #  查看
    class
    games
    info

2、查看集合
   show collections 或者  show tables

    > show collections
    class
    games
    info

    > show tables
    class
    games
    info

3、删除集合
   使用数据库的内置函数进行删除

    > db.games.drop()
    true

    > show collections
    class
    info

4、集合改名

    > db.info.renameCollection("test")
     "ok" : 1 
    > 
    > show collections
    class
    test

5、迁移集合

  #  另外一种叫法:跨数据库重命名集合(当然也可以不换集合的名字)
  #  注意:必须要有相关权限才能够操作,最直接的是切换到 admin 库下进行操作

    > show dbs
    admin     0.000GB
    config    0.000GB
    local     0.000GB
    test      0.000GB
    ceshi     0.000GB

    > use test
    switched to db test

    > show collections
    class
    games
    test

    > use admin
    switched to db admin

    #  迁移并更改集合名字
    > db.runCommand(renameCollection:"test.games",to:"ceshi.gamestest",dropTarget:true)
     "ok" : 1 

    #  迁移但是不更改集合名字
    > db.runCommand(renameCollection:"test.test",to:"ceshi.test",dropTarget:true)
     "ok" : 1 

    > use ceshi
    switched to db ceshi

    > show collections
    gamestest
    info
    test

    > use test
    switched to db test

    > show collections
    class

   #  说明:
    显示添加集合完整的语法格式为:  db.createCollection( name ,options )

    name: 是指定还要创建的集合的名字
    options: 是一个可选项,具体有如下的选项 ( 一般情况下很少使用这个选项 )
              capped:(可选项),为 true 则创建的是固定集合(即制定大小的集合) 
                      如果为 true 时,则必须指定下面 size 选项的大小
                      当固定集合使用当到达最大值时,后面的文档自动覆盖签名的文档
              size:  (可选项),限制集合空间的大小,默认没有限制。如果 capped 为 true ,则必须指定此字段
              autoindexid: (可选项),如果为 true ,自动中 _id 字段创建索引,默认是 true 
              max:   (可选项),限制集合包含文档的最大数量,默认是没有限制

三、文档相关的操作


1、文档的创建

  #  文档的创建两个内置函数来实现的
  db.Collectionname.insert(Documentname) 、db.Collectionname.save(Documentname)

  1)insert 方法
  db.Collectionname.insert()       #  可插入单条或者多条数据(批量插入)
  db.Collectionname.insertOne()    #  只能插入单条数据
  db.Collectionname.insertMany()   #  只能插入多条数据

  insert函数的语法格式: 
  db.collection.insert(Collectionname, writeConcern, ordered)

  Collectionname: 表示可设置插入一条或多条文档
  writeConcern:表示自定义写出错的级别,是一种出错捕捉机制
  ordered:<boolean> 是可选的,默认为 true 。 
           默认时在执行文档的有序插入,如果其中一个文档发生错误,MongoDB将返回而不处理数组中的其余文档
           为 false,则执行无序插入,若其中一个文档发生错误,则忽略错误,继续处理数组中的其余文档

    # 一般情况下都很少在插入时带上后面两个参数         

    > db.info.find()
     "_id" : 90, "name" : "blue", "age" : 30 

    > db.info.insert(name:"itit", age:28)     #  insert 插入一条数据
    WriteResult( "nInserted" : 1 )

    > db.info.find()
     "_id" : 90, "name" : "blue", "age" : 30 
     "_id" : ObjectId("622070fb801321c032895aa9"), "name" : "itit", "age" : 28 

    > db.info.insert([name:"zozo", age:25,name:"toto", age:100])   #  insert 插入多条数据
    BulkWriteResult(
    "writeErrors" : [ ],
    "writeConcernErrors" : [ ],
    "nInserted" : 2,
    "nUpserted" : 0,
    "nMatched" : 0,
    "nModified" : 0,
    "nRemoved" : 0,
    "upserted" : [ ]
    )

    > db.info.find()
     "_id" : 90, "name" : "blue", "age" : 30 
     "_id" : ObjectId("622070fb801321c032895aa9"), "name" : "itit", "age" : 28 
     "_id" : ObjectId("622070e3801321c032895aa7"), "name" : "zozo", "age" : 25 
     "_id" : ObjectId("622070e3801321c032895aa8"), "name" : "toto", "age" : 100 

    > db.info.insertOne(name:"mike", age:33,name:"kiki", age:20)
    
        "acknowledged" : true,
        "insertedId" : ObjectId("61d7ed25426f10e36ad4a89e")
    

    > db.info.find()        #  可见 insertOne 一次插入多个数据的时候只有第一个生效
     "_id" : 90, "name" : "blue", "age" : 30 
     "_id" : ObjectId("61d7ed25426f10e36ad4a89e"), "name" : "mike", "age" : 33 

    #  相同语句连续插入两次
    > db.info.insertOne(name:"coco", age:20)
    
        "acknowledged" : true,
        "insertedId" : ObjectId("622068f5801321c032895a9a")
    

    > db.info.insertOne(name:"coco", age:20)
    
        "acknowledged" : true,
        "insertedId" : ObjectId("62206900801321c032895a9b")
    

    > db.info.find()
     "_id" : 90, "name" : "blue", "age" : 30 
     "_id" : ObjectId("61d7ed25426f10e36ad4a89e"), "name" : "mike", "age" : 33 
     "_id" : ObjectId("622068f5801321c032895a9a"), "name" : "coco", "age" : 20 
     "_id" : ObjectId("62206900801321c032895a9b"), "name" : "coco", "age" : 20 

    #  见上,同一条文档可以多从连续插入不会报错, 会发现 ObjectId  是连续的

    #  一次性插入多条数据
    > db.info.insertMany([name:"yoyo", age:33,name:"bill", age:20])
    
        "acknowledged" : true,
        "insertedIds" : [
            ObjectId("61d7ed50426f10e36ad4a8a0"),
            ObjectId("61d7ed50426f10e36ad4a8a1")
        ]
    

    > db.info.find()
     "_id" : 90, "name" : "blue", "age" : 30 
     "_id" : ObjectId("61d7eced426f10e36ad4a89d"), "name" : "kiki", "age" : 20 
     "_id" : ObjectId("622068f5801321c032895a9a"), "name" : "coco", "age" : 20 
     "_id" : ObjectId("62206900801321c032895a9b"), "name" : "coco", "age" : 20 
     "_id" : ObjectId("61d7ed50426f10e36ad4a8a0"), "name" : "yoyo", "age" : 33 
     "_id" : ObjectId("61d7ed50426f10e36ad4a8a1"), "name" : "bill", "age" : 20 

   2)save 方法

   db.Collectionname.save()    ###  可插入单条 或者 多条数据(批量插入),具体看写多少条文档

   #  单个插入,插入一个文档
    > db.info.save(name:"rose", age:22)    
    WriteResult( "nInserted" : 1 )

    > db.info.find()
     "_id" : ObjectId("61d7b15b426f10e36ad4a885"), "name" : "rose", "age" : 22 

    > db.info.save(_id:80,name:"tom", age:35)
    WriteResult( "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 80 )

    > db.info.find()
     "_id" : ObjectId("61d7b15b426f10e36ad4a885"), "name" : "rose", "age" : 22 
     "_id" : 80, "name" : "tom", "age" : 35 

    #  再次插入指定 _id ,发现此 _id 已经存在,如果内容不一样 ,此时就是 更新文档数据了
    > db.info.save(_id:80,name:"tom", age:40)
    WriteResult( "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 )

    > db.info.find()
     "_id" : ObjectId("61d7b15b426f10e36ad4a885"), "name" : "rose", "age" : 22 
     "_id" : 80, "name" : "tom", "age" : 40 

    #  批量插入,多个文档

    > db.class.find()
     "_id" : ObjectId("61dd25b187f250afc6d4f3e2"), "name" : "zhangsan" 
     "_id" : ObjectId("61de533957216ed19d04e4af"), "name" : "rose", "age" : 22 

    > db.class.save([name:"tim", age:40,name:"jack",age:35])
      BulkWriteResult(
        "writeErrors" : [ ],
        "writeConcernErrors" : [ ],
        "nInserted" : 2,
        "nUpserted" : 0,
        "nMatched" : 0,
        "nModified" : 0,
        "nRemoved" : 0,
        "upserted" : [ ]
    )

    > db.class.find()
     "_id" : ObjectId("61dd25b187f250afc6d4f3e2"), "name" : "zhangsan" 
     "_id" : ObjectId("61de533957216ed19d04e4af"), "name" : "rose", "age" : 22 
     "_id" : ObjectId("61de543e57216ed19d04e4b3"), "name" : "tim", "age" : 40 
     "_id" : ObjectId("61de543e57216ed19d04e4b4"), "name" : "jack", "age" : 35 

2、文档的更新

  db.Collectionname.update()       #  只更新匹配到的第一个文档,不建议使用这此种形式写法
  db.Collectionname.updateOne()    #  只能更新单条文档
  db.Collectionname.updateMany()   #  多条文档全部更新

    > db.info.find()
     "_id" : ObjectId("61d7ea55426f10e36ad4a896"), "name" : "coco", "age" : 40 
     "_id" : ObjectId("61d7ea5a426f10e36ad4a897"), "name" : "coco", "age" : 60 
     "_id" : ObjectId("61d7ea62426f10e36ad4a898"), "name" : "coco", "age" : 30 
     "_id" : 13, "name" : "coco", "age" : 39 
     "_id" : 15, "name" : "coco", "age" : 39 

    > db.info.updateOne(name:"coco",$set:age:10)
     "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 

    > db.info.find()      # 只更改了第一行的   coco  10
     "_id" : ObjectId("61d7ea55426f10e36ad4a896"), "name" : "coco", "age" : 10 
     "_id" : ObjectId("61d7ea5a426f10e36ad4a897"), "name" : "coco", "age" : 60 
     "_id" : ObjectId("61d7ea62426f10e36ad4a898"), "name" : "coco", "age" : 30 
     "_id" : 13, "name" : "coco", "age" : 39 
     "_id" : 15, "name" : "coco", "age" : 39 

    > db.info.updateOne(name:"coco",$set:age:10)       
     "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 0 

    > db.info.updateOne(name:"coco",$set:age:10) 
     WriteResult( "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 )

    > db.info.find()    #  上面再次执行多少次都不会报错,但是也不会更改,检测到 age 是 10 了
     "_id" : ObjectId("61d7ea55426f10e36ad4a896"), "name" : "coco", "age" : 10 
     "_id" : ObjectId("61d7ea5a426f10e36ad4a897"), "name" : "coco", "age" : 60 
     "_id" : ObjectId("61d7ea62426f10e36ad4a898"), "name" : "coco", "age" : 30 
     "_id" : 13, "name" : "coco", "age" : 39 
     "_id" : 15, "name" : "coco", "age" : 39 

    > db.info.updateMany(name:"coco",$set:age:10)
     "acknowledged" : true, "matchedCount" : 5, "modifiedCount" : 4 

    > db.info.find()      #  全部更改了
     "_id" : ObjectId("61d7ea55426f10e36ad4a896"), "name" : "coco", "age" : 10 
     "_id" : ObjectId("61d7ea5a426f10e36ad4a897"), "name" : "coco", "age" : 10 
     "_id" : ObjectId("61d7ea62426f10e36ad4a898"), "name" : "coco", "age" : 10 
     "_id" : 13, "name" : "coco", "age" : 10 
     "_id" : 15, "name" : "coco", "age" : 10 

3、文档删除

   db.Collectionname.deleteOne()    #  只能删除单条文档
   db.Collectionname.deleteMany()   #  多条文档一起删除
   db.Collectionname.remove()       #  删除单条(指定删除或者匹配删除)、删除多条(匹配删除)

   # 1)deleteOne 和  deleteMany 方法

    > db.class.find()
     "_id" : 13, "name" : "coco", "age" : 39 
     "_id" : ObjectId("61dd25b187f250afc6d4f3e2"), "name" : "zhangsan"     
     "_id" : ObjectId("61de53da57216ed19d04e4b1"), "name" : "kite", "age" : 20    
     "_id" : ObjectId("61de6a0e4f8fa3f11da6cd85"), "name" : "ggg", "age" : 20 
     "_id" : ObjectId("61de68364f8fa3f11da6cd42"), "name" : "bob", "age" : 30 
     "_id" : ObjectId("61de6bcff2cb355cb7a46a15"), "name" : "rose", "age" : 60 
     "_id" : ObjectId("61de6bd0f2cb355cb7a46a16"), "name" : "rose", "age" : 60 
     "_id" : ObjectId("61de6bd1f2cb355cb7a46a17"), "name" : "rose", "age" : 60 

    #  指定 _id 删除
    > db.class.deleteOne(_id:13)     
     "acknowledged" : true, "deletedCount" : 1 

    > db.class.deleteOne(_id:ObjectId("61de6a0e4f8fa3f11da6cd85"))
     "acknowledged" : true, "deletedCount" : 1 

    > db.class.find()   
     "_id" : ObjectId("61dd25b187f250afc6d4f3e2"), "name" : "zhangsan"     
     "_id" : ObjectId("61de53da57216ed19d04e4b1"), "name" : "kite", "age" : 20    
     "_id" : ObjectId("61de68364f8fa3f11da6cd42"), "name" : "bob", "age" : 30 
     "_id" : ObjectId("61de6bcff2cb355cb7a46a15"), "name" : "rose", "age" : 60 
     "_id" : ObjectId("61de6bd0f2cb355cb7a46a16"), "name" : "rose", "age" : 60 
     "_id" : ObjectId("61de6bd1f2cb355cb7a46a17"), "name" : "rose", "age" : 60 

    #  删除符合条件的第一个文档
    > db.class.deleteOne("name":"rose")
     "acknowledged" : true, "deletedCount" : 1 

    > db.class.find()   
     "_id" : ObjectId("61dd25b187f250afc6d4f3e2"), "name" : "zhangsan"     
     "_id" : ObjectId("61de53da57216ed19d04e4b1"), "name" : "kite", "age" : 20    
     "_id" : ObjectId("61de68364f8fa3f11da6cd42"), "name" : "bob", "age" : 30    
     "_id" : ObjectId("61de6bd0f2cb355cb7a46a16"), "name" : "rose", "age" : 60 
     "_id" : ObjectId("61de6bd1f2cb355cb7a46a17"), "name" : "rose", "age" : 60 

    #  删除符合条件的所有文档
    > db.class.deleteMany("name":"rose")
     "acknowledged" : true, "deletedCount" : 2 

    > db.class.find()   
     "_id" : ObjectId("61dd25b187f250afc6d4f3e2"), "name" : "zhangsan"     
     "_id" : ObjectId("61de53da57216ed19d04e4b1"), "name" : "kite", "age" : 20    
     "_id" : ObjectId("61de68364f8fa3f11da6cd42"), "name" : "bob", "age" : 30  

  #  2) remove 方法

    > db.info.find()
     "_id" : 80, "name" : "mike", "age" : 30 
     "_id" : ObjectId("61d7a122426f10e36ad4a87d"), "name" : "jack", "age" : 20 
     "_id" : ObjectId("61d7a3c3426f10e36ad4a87e"), "name" : "bob", "age" : 16 
     "_id" : ObjectId("61d7a484426f10e36ad4a880"), "name" : "jane", "age" : 26 
     "_id" : ObjectId("61d7a484426f10e36ad4a881"), "name" : "kite", "age" : 21 
     "_id" : ObjectId("61d7a4c9426f10e36ad4a883"), "name" : "jane", "age" : 29 
     "_id" : ObjectId("61d7a4c9426f10e36ad4a884"), "name" : "kite", "age" : 21 
     "_id" : ObjectId("61d7a4c9426f10e36ad4a885"), "name" : "kite", "age" : 21 

    > db.info.remove(_id:80)
    WriteResult( "nRemoved" : 1 )

    > db.info.remove(_id : ObjectId("61d7a122426f10e36ad4a87d"))
    WriteResult( "nRemoved" : 1 )

    > db.info.find()
     "_id" : ObjectId("61d7a3c3426f10e36ad4a87e"), "name" : "bob", "age" : 16 
     "_id" : ObjectId("61d7a484426f10e36ad4a880"), "name" : "jane", "age" : 26 
     "_id" : ObjectId("61d7a484426f10e36ad4a881"), "name" : "kite", "age" : 21 
     "_id" : ObjectId("61d7a4c9426f10e36ad4a883"), "name" : "jane", "age" : 29 
     "_id" : ObjectId("61d7a4c9426f10e36ad4a884"), "name" : "kite", "age" : 21 
     "_id" : ObjectId("61d7a4c9426f10e36ad4a885"), "name" : "kite", "age" : 21 

     > db.info.remove(name:"jane",age:26) 
     WriteResult( "nRemoved" : 1 )

     > db.info.find()
      "_id" : ObjectId("61d7a3c3426f10e36ad4a87e"), "name" : "bob", "age" : 16 
      "_id" : ObjectId("61d7a484426f10e36ad4a881"), "name" : "kite", "age" : 21 
      "_id" : ObjectId("61d7a4c9426f10e36ad4a883"), "name" : "jane", "age" : 29 
      "_id" : ObjectId("61d7a4c9426f10e36ad4a884"), "name" : "kite", "age" : 21 
      "_id" : ObjectId("61d7a4c9426f10e36ad4a885"), "name" : "kite", "age" : 21 

     > db.info.remove(name:"kite",age:21)  
     WriteResult( "nRemoved" : 3 )         ### 条件匹配到了就都删除了,不关心 _id 号

     > db.info.find()
      "_id" : ObjectId("61d7a3c3426f10e36ad4a87e"), "name" : "bob", "age" : 16    
      "_id" : ObjectId("61d7a4c9426f10e36ad4a883"), "name" : "jane", "age" : 29 

4、文档查询(这里指说明简单查询,复杂的查询中第二法部分)

   1) 全部查询
       文档查询语法格式: db.Collectionname.find() 

    > db.fruit.find()
     "_id" : ObjectId("61de7780f2cb355cb7a46a1c"), "name" : "apple", "price" : 8.5 
     "_id" : ObjectId("61de77a1f2cb355cb7a46a1d"), "name" : "banana", "price" : 3.5  
     "_id" : 80, "name" : "orange", "price" : 6.5 
     "_id" : 70, "name" : "pear", "price" : 6.8 
     "_id" : ObjectId("61de786ef2cb355cb7a46a1f"), "name" : "peach", "price" : 11.5 
     "_id" : ObjectId("61de78d9f2cb355cb7a46a20"), "name" : "grapes", "price" : 11.5 
     "_id" : ObjectId("61de7931f2cb355cb7a46a22"), "name" : "plum", "price" : 5.5 

    #  转化一种输出方式,以格式化的形式输出信息
    > db.fruit.find().pretty()  
    
        "_id" : ObjectId("61de7780f2cb355cb7a46a1c"),
        "name" : "apple",
        "price" : 8.5
    
    
        "_id" : ObjectId("61de77a1f2cb355cb7a46a1d"),
        "name" : "banana",
        "price" : 3.5
    
     "_id" : 80, "name" : "orange", "price" : 6.5 
     "_id" : 70, "name" : "pear", "price" : 6.8 
    
        "_id" : ObjectId("61de786ef2cb355cb7a46a1f"),
        "name" : "peach",
        "price" : 11.5
    
    
        "_id" : ObjectId("61de78d9f2cb355cb7a46a20"),
        "name" : "grapes",
        "price" : 11.5
    
    
        "_id" : ObjectId("61de7931f2cb355cb7a46a22"),
        "name" : "plum",
        "price" : 5.5
    

    2) 指定条件查询
    > db.fruit.find(_id:80)
     "_id" : 80, "name" : "orange", "price" : 6.5 

    > db.fruit.find(_id:ObjectId("61de786ef2cb355cb7a46a1f"))
     "_id" : ObjectId("61de786ef2cb355cb7a46a1f"), "name" : "peach", "price" : 11.5 

    > db.fruit.find("name":"apple")
     "_id" : ObjectId("61de7780f2cb355cb7a46a1c"), "name" : "apple", "price" : 8.5 

四、关于 Insert 、Update 的使用说明

  • Mongodb 3.2 版本以前是没有 insertOne、insertMany、updateOne、updateMany 这种使用方法的,只有 Insert 、Update 的方法

  • 关于 Insert 方法上面有具体介绍过的,下面就 3.2 版本之前的 Update 的语法作一个说明

#  Update函数的语法格式
db.collection.update(query,obj,upsert,multi)
   query:查询条件
   obj:  update对象和一些更新操作符
   upsert:如果不存在update的记录,是否插入objNew这个新的文档,true为插入,默认为false,不插入。
   multi: 默认是false,只更新找到的第一条记录。如果为true,把按条件查询出来的记录全部更新。

###  分下面几种情况:

1、条件匹配到  
   第三个字段是 false ,即为默认状态 ,这时候第四个字段有两种情况
   1)x=a,x,false,false   匹配到的第一个 x=a 那条文档内容 
   2)x=a,x,false,true    匹配到的所有 x=a 所有文档内容

2、条件没匹配到
   第三个字段是 true ,这个时候分四种情况:
   1) x=a,x,true,false     没有匹配到 x=a ,执行插入,这里是添加文档
       x=a,x,true,true      没有匹配到 x=a ,执行插入,这里是添加文档
   2) x=a,x,true,flase     匹配到 x=a ,执行更改,只更改匹配到的第一个文档内容
       x=a,x,true,true      匹配到 x=a ,执行更改,更改匹配到的 全部文档 的内容

    #  使用示例
    > db.info.find()
     "_id" : ObjectId("61d7b15b426f10e36ad4a885"), "name" : "rose", "age" : 22 
     "_id" : ObjectId("61d7b1a9426f10e36ad4a886"), "name" : "rose", "age" : 22 

    #  默认情况下修改了匹配到的第一个
    > db.info.update("name":"rose",$set:"age":40)
    WriteResult( "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 )

    > db.info.update("name":"rose",$set:"age":40,false,false)     

    #  效果同上,默认情况下  upsert 、multi  都是  false的 

    > db.info.find()
     "_id" : ObjectId("61d7b15b426f10e36ad4a885"), "name" : "rose", "age" : 40 
     "_id" : ObjectId("61d7b1a9426f10e36ad4a886"), "name" : "rose", "age" : 22 

    > db.info.insert("name":"rose","age":22)
    WriteResult( "nInserted" : 1 )

    > db.info.find()
     "_id" : ObjectId("61d7b15b426f10e36ad4a885"), "name" : "rose", "age" : 40 
     "_id" : ObjectId("61d7b1a9426f10e36ad4a886"), "name" : "rose", "age" : 22 
     "_id" : ObjectId("61d7bc4f426f10e36ad4a888"), "name" : "rose", "age" : 22 

    > db.info.insert("name":"rose")
    WriteResult( "nInserted" : 1 )
    > db.info.find()
     "_id" : ObjectId("61d7b15b426f10e36ad4a885"), "name" : "rose", "age" : 40 
     "_id" : ObjectId("61d7b1a9426f10e36ad4a886"), "name" : "rose", "age" : 22 
     "_id" : ObjectId("61d7bc30426f10e36ad4a887"), "name" : "rose", "age" : 22 
     "_id" : ObjectId("61d7caf9426f10e36ad4a889"), "name" : "rose" 

    #  全部修改
    > db.info.update("name":"rose",$set:"age":40,false,true)
    WriteResult( "nMatched" : 4, "nUpserted" : 0, "nModified" : 4 )

    > db.info.find()
     "_id" : ObjectId("61d7b15b426f10e36ad4a885"), "name" : "rose", "age" : 40 
     "_id" : ObjectId("61d7b1a9426f10e36ad4a886"), "name" : "rose", "age" : 40 
     "_id" : ObjectId("61d7bc30426f10e36ad4a887"), "name" : "rose", "age" : 40 
     "_id" : ObjectId("61d7caf9426f10e36ad4a889"), "name" : "rose", "age" : 40 

    #  第三个字段是 true 时,分两种大情况四种具体情况

    #  没匹配到的情况

    > db.info.update("name":"jack",$set:"age":50,true,false)   
    WriteResult(
        "nMatched" : 0,
        "nUpserted" : 1,
        "nModified" : 0,
        "_id" : ObjectId("61d7d0e0b3e595522b7bd153")
    )

    > db.info.find()
     "_id" : ObjectId("61d7b15b426f10e36ad4a885"), "name" : "rose", "age" : 40 
     "_id" : ObjectId("61d7b1a9426f10e36ad4a886"), "name" : "rose", "age" : 40 
     "_id" : ObjectId("61d7bc30426f10e36ad4a887"), "name" : "rose", "age" : 40 
     "_id" : ObjectId("61d7caf9426f10e36ad4a889"), "name" : "rose", "age" : 40 
     "_id" : ObjectId("61d7d0e0b3e595522b7bd153"), "name" : "jack", "age" : 50 

    > db.info.update("name":"mike",$set:"age":50,true,true)
    WriteResult( "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 )

    > db.info.find()
     "_id" : ObjectId("61d7b15b426f10e36ad4a885"), "name" : "rose", "age" : 40 
     "_id" : ObjectId("61d7b1a9426f10e36ad4a886"), "name" : "rose", "age" : 40 
     "_id" : ObjectId("61d7bc30426f10e36ad4a887"), "name" : "rose", "age" : 40 
     "_id" : ObjectId("61d7caf9426f10e36ad4a889"), "name" : "rose", "age" : 40 
     "_id" : ObjectId("61d7d0e0b3e595522b7bd153"), "name" : "jack", "age" : 50 
     "_id" : ObjectId("61d7d0es3e5sd22b7bd4a153"), "name" : "mike", "age" : 50 

    # 匹配到的情况

    > db.info.update("name":"rose",$set:"age":99,true,true)
    WriteResult( "nMatched" : 5, "nUpserted" : 0, "nModified" : 5 )

    > db.info.find()
     "_id" : ObjectId("61d7b15b426f10e36ad4a885"), "name" : "rose", "age" : 99 
     "_id" : ObjectId("61d7b1a9426f10e36ad4a886"), "name" : "rose", "age" : 99 
     "_id" : ObjectId("61d7bc30426f10e36ad4a887"), "name" : "rose", "age" : 99 
     "_id" : ObjectId("61d7bc4f426f10e36ad4a888"), "name" : "rose", "age" : 99 
     "_id" : ObjectId("61d7caf9426f10e36ad4a889"), "name" : "rose", "age" : 99 

    > db.info.update("name":"rose",$set:"age":60,true,false)
    WriteResult( "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 )

    > db.info.find()
     "_id" : ObjectId("61d7b15b426f10e36ad4a885"), "name" : "rose", "age" : 60 
     "_id" : ObjectId("61d7b1a9426f10e36ad4a886"), "name" : "rose", "age" : 99 
     "_id" : ObjectId("61d7bc30426f10e36ad4a887"), "name" : "rose", "age" : 99 
     "_id" : ObjectId("61d7bc4f426f10e36ad4a888"), "name" : "rose", "age" : 99 
     "_id" : ObjectId("61d7caf9426f10e36ad4a889"), "name" : "rose", "age" : 99 

以上是关于Mongodb 数据库的简单使用的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB中的多对多

如何在 MongoDB 中获得简单的计数和分组?

MongoDB使用的一些坑与经历

MongoDB 中与 Ruby 一起使用的字符串数据类型的最大长度是多少?

MYSQL 数据库中专业术语叫法

使用 MongoDB 聚合计算计数和平均值