欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

MongoDB 增删改查

发布时间:2025/5/22 编程问答 27 豆豆
生活随笔 收集整理的这篇文章主要介绍了 MongoDB 增删改查 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

MongoDB 增删改查

    • 学习目标:
    • 学习内容:
    • 使用步骤
      • 数据库
        • 创建数据库
        • 删除数据库
      • 集合
        • 创建集合
        • 删除集合
      • 文档
        • 查找文档
          • 使用 find()查找文档
          • 使用 findOne()查找文档
          • 使用 pretty()将结果格式化
          • 比较运算符
          • 范围运算符
          • 逻辑运算符
          • 正则表达式
          • limit和skip
          • 自定义查询
          • 投影
          • 排序
          • 统计个数
          • 消除重复
        • 添加文档
          • 使用 insert()添加文档
          • 使用 save()添加文档
          • 使用 insertOne()添加文档
          • 使用 insertMany()插入多条文档
        • 更新文档
        • 删除文档
    • 总结:

学习目标:

MongoDB的使用

环境:

Windows:10
MongoDB:5.0.2

MongoDB的安装:https://blog.csdn.net/qq_44989881/article/details/119604129

学习内容:

MongoDB 数据库的操作

1、 数据库的增删改查
2、集合的增删改查
3、文档的增删改查

使用步骤

数据库

关于database的基础命令

  • 查看当前的数据库:db
  • 查看所有的数据库:show dbs /show databases
  • 切换数据库:use 数据库名
  • 删除当前的数据库:db.dropDatabase()

创建数据库

MongoDB 创建数据库的语法格式如下:

use DATABASE_NAME

如果数据库不存在,则创建数据库,否则切换到指定数据库。

> use vvcat
switched to db vvcat

> db
vvcat

删除数据库

MongoDB 删除数据库的语法格式如下:

db.dropDatabase()

删除当前数据库,默认为 test,使用 db 命令查看当前数据库名。

> db
demo

> show dbs
admin 0.000GB
config 0.000GB
demo 0.000GB
local 0.000GB
vvcat 0.000GB

切换到数据库 demo :

> use demo
switched to db demo

执行删除命令:
注:db表示当前数据库

> db.dropDatabase()
{ “ok” : 1 }

最后,通过 show dbs 命令查看数据库是否删除成功:

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

集合

关于集合的基础命令

  • 不手动创建集合:
    向不存在的集合中第一次加入数据时,集合会被创建出来

  • 手动创建集合:

    • db.createCollection(name, options)
      • 参数说明:
        • name: 要创建的集合名称
        • options: 可选参数, 指定有关内存大小及索引的选项
      • options 可以是如下参数:
        • capped:默认值为false表示不设置上限,值为true表示设置上限。
        • size:当capped值为true时,需要指定此参数,表示上限大小,当问你当达到上限时,会将之前的数据覆盖,单位为字节。
        • max :指定固定集合中包含文档的最大数量。

    查看集合:show collections
    删除集合:db.集合名称.drop()

    创建集合

    在 vvcat 数据库中创建 vvcat 集合

    db.createCollection(“vvcat”)
    { “ok” : 1 }

    如果要查看已有集合,可以使用 show collections 或 show tables 命令:

    > show collections
    vvcat

    > show tables
    vvcat

    创建固定集合 sut,整个集合空间大小 10B,文档最大个数为 5个。

    > db.createCollection(“sut”, {capped: true, size:10, max : 5})
    { “ok” : 1 }

    > show collections
    vvcat
    sut

    在 MongoDB 中,不需要创建集合。当在插入一些文档时,MongoDB 会自动创建集合。

    > db.info.insert({“name” : “vvcat”})
    WriteResult({ “nInserted” : 1 })
    > show collections
    info
    sut
    vvcat

    删除集合

    删除集合:db.集合名称.drop()

    > db.info.drop()
    true
    > show collections
    vvcat
    sut

    从结果中可以看出 info 集合已被删除。

    文档

    关于文档的基础命令

    • 查看当前集合下所有文档:db.info.find()
    • 插入文档:db.COLLECTION_NAME.insert(document)
    • 删除一条文档:db.inventory.deleteOne({})
    • 删除所有文档:db.inventory.deleteMany({})

    查找文档

    使用 find()查找文档

    find()查找文档的语法格式如下:

    db.集合名称.find({条件文档})

    > db.numbers.find()
    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
    { “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
    { “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995b”), “num” : 1 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995c”), “num” : 2 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995d”), “num” : 3 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995e”), “num” : 4 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995f”), “num” : 5 }

    > db.numbers.find({num:3})
    { “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995d”), “num” : 3 }

    使用 findOne()查找文档

    findOne()查找文档的语法格式如下:

    db.集合名称.findOne({条件文档})

    查询结果,只返回第一个。

    > db.numbers.findOne()
    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }

    > db.numbers.findOne({num:2})
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }

    使用 pretty()将结果格式化

    pretty()查找文档的语法格式如下:

    db.集合名称.find({条件文档}).pretty()

    > db.vvcat.find({name:“vvcat”}).pretty() )
    {
    “_id” : ObjectId(“6114bbf9117b7214c4a99965”),
    “name” : “vvcat”,
    “age” : 20,
    “gender” : “男”
    }
    {
    “_id” : ObjectId(“1114bbf9217b7214c4a99344”),
    “name” : “cat”,
    “age” : 10,
    “gender” : “男”
    }

    比较运算符
    • 等于 ( = ) :默认是等于判断,没有运算符
    • 小于 ( < ) :$It (less than)
    • 小于等于 ( <= ):$lte (less than equal)
    • 大于 ( > ) :$gt (greater than)
    • 大于等于 ( >= ):$gte
    • 不等于 ( != ):$ne

    查找num小于等于3的文档:

    > db.numbers.find({num:{$lte:3}})
    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995b”), “num” : 1 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995c”), “num” : 2 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995d”), “num” : 3 }

    查找num小于3的文档:

    > db.numbers.find({num:{$lt:3}})
    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995b”), “num” : 1 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995c”), “num” : 2 }

    查询num为2,4的文档

    > db.numbers.find({num:{$in:[2,4]}})
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995c”), “num” : 2 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995e”), “num” : 4 }

    查询num不为2,4的文档

    > db.numbers.find({num:{$nin:[2,4]}})
    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
    { “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995b”), “num” : 1 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995d”), “num” : 3 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995f”), “num” : 5 }

    范围运算符

    使用 “in","in","in""nin” 判断是否在某个范围内

    > db.numbers.find({num:{$in:[2,4]}})
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995c”), “num” : 2 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995e”), “num” : 4 }

    逻辑运算符
    • and:在json中写多个条件即可
    • or:使用$or,值为数组,数组中每个元素为json

    查找num大于等于3,且_id等于6114b854117b7214c4a99955的文档。

    > db.numbers.find({num:{$gte:3},_id:ObjectId(“6114b854117b7214c4a99955”)})
    { “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }

    查找num大于3,或_id等于6114b854117b7214c4a99951的文档。

    > db.numbers.find({$or:[{num:{$gt:3}},{_id:ObjectId(“6114b854117b7214c4a99951”)}]})
    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
    { “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995e”), “num” : 4 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995f”), “num” : 5 }

    查找num小于等于2,或_id是6114b8df117b7214c4a9995e,6114b8df117b7214c4a9995f的文档

    db.numbers.find({$or:[{num:{$lte:2}},{"_id":{$in:[ObjectId(“6114b8df117b7214c4a9995e”),ObjectId(“6114b8df117b7214c4a9995f”)]}}]})
    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995b”), “num” : 1 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995c”), “num” : 2 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995e”), “num” : 4 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995f”), “num” : 5 }

    查找num小于等于3,或_id等于6114b854117b7214c4a99951的文档,并且num大于0的文档。

    > db.numbers.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: or:[{num:{lte:3}},{_id:ObjectId(“6114b854117b7214c4a99951”)}],num:{$gt:0}})
    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995b”), “num” : 1 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995c”), “num” : 2 }
    { “_id” : ObjectId(“6114b8df117b7214c4a9995d”), “num” : 3 }

    正则表达式

    使用//或$regex编写正则表达式

    在集合中添加一些文档数据

    > db.collection.insertMany([{a:“assasadas”}, {a:“asqwewqrqw”},{a:“ghrferfersd”}, {a:“ddsssff”}])
    {
    “acknowledged” : true,
    “insertedIds” : [
    ObjectId(“6114d23f117b7214c4a999d4”),
    ObjectId(“6114d23f117b7214c4a999d5”),
    ObjectId(“6114d23f117b7214c4a999d6”),
    ObjectId(“6114d23f117b7214c4a999d7”)
    ]
    }

    查找以 as 开头的文档

    > db.collection.find({a:/^as/})
    { “_id” : ObjectId(“6114d23f117b7214c4a999d4”), “a” : “assasadas” }
    { “_id” : ObjectId(“6114d23f117b7214c4a999d5”), “a” : “asqwewqrqw” }

    查找以 f 结尾的文档

    > db.collection.find({a:{$regex:‘f$’}})
    { “_id” : ObjectId(“6114d23f117b7214c4a999d7”), “a” : “ddsssff” }

    查找包含f字母的文档

    > db.collection.find({a:{$regex:‘f’}})
    { “_id” : ObjectId(“6114d23f117b7214c4a999d6”), “a” : “ghrferfersd” }
    { “_id” : ObjectId(“6114d23f117b7214c4a999d7”), “a” : “ddsssff” }

    limit和skip
    • 方法limit():用于读取指定数量的文档
    • 方法skip():用于跳过指定数量的文档

    以下为自定义待查询的数据:

    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
    { “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
    { “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
    { “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }
    { “_id” : ObjectId(“6114b854117b7214c4a99957”), “num” : 7 }

    limit()查找文档的语法格式如下:

    db.集合名称.find().limit(NUMBER)

    查询前3条数据

    > db.numbers.find().limit(3)
    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }

    skip()查找文档的语法格式如下:

    db.集合名称.find().skip(NUMBER)

    跳过前3条数据,从第4条数据开始查询

    > db.numbers.find().skip(3)
    { “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
    { “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
    { “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }
    { “_id” : ObjectId(“6114b854117b7214c4a99957”), “num” : 7 }

    同时使用

    db.集合名称.find().limit(NUMBER).skip(NUMBER)

    db.集合名称.find().skip(NUMBER).limit(NUMBER)

    先跳过3条数据,然后显示跳过以后的3条数据

    > db.numbers.find().skip(3).limit(3)
    { “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
    { “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
    { “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }

    db.numbers.find().limit(3).skip(3)
    { “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
    { “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
    { “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }

    自定义查询

    以下为自定义待查询的数据:

    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
    { “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
    { “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
    { “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }
    { “_id” : ObjectId(“6114b854117b7214c4a99957”), “num” : 7 }

    使用$where后面写一个函数,返回满足条件的数据

    查询num小于的5的文档

    > db.numbers.find({}
    … $where:function(){
    … return this.num<5;
    … }})
    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
    { “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }

    投影

    在查询到的返回结果中,只选择必要的字段
    投影的语法格式如下:

    db.集合名称.find({},{字段名称:1,...})

    参数为字段与值,值为1表示显示,值为0不显示
    特殊:对于_id列默认是显示的,如果不显示需要明确设置为0

    查找num大于3的文档,不显示_id,只显示num

    > db.numbers.find({num:{$gte:3}},{_id:0})
    { “num” : 3 }
    { “num” : 4 }
    { “num” : 5 }
    { “num” : 6 }
    { “num” : 7 }

    查找全部的文档,只显示 _id 不显示 num

    > db.numbers.find({},{_id:1,num:0})
    { “_id” : ObjectId(“6114b854117b7214c4a99951”) }
    { “_id” : ObjectId(“6114b854117b7214c4a99952”) }
    { “_id” : ObjectId(“6114b854117b7214c4a99953”) }
    { “_id” : ObjectId(“6114b854117b7214c4a99954”) }
    { “_id” : ObjectId(“6114b854117b7214c4a99955”) }
    { “_id” : ObjectId(“6114b854117b7214c4a99956”) }
    { “_id” : ObjectId(“6114b854117b7214c4a99957”) }

    排序

    方法sort(),用于对集进行排序
    sort()方法的语法格式如下:

    db.集合名称.find().sort({字段:1,...})
    • 参数1为升序排列
    • 参数-1为降序排列

    降序排列

    > db.numbers.find().sort({num:-1})
    { “_id” : ObjectId(“6114b854117b7214c4a99957”), “num” : 7 }
    { “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }
    { “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
    { “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
    { “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }

    升序排列

    > db.numbers.find().sort({num:1})
    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
    { “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
    { “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
    { “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }
    { “_id” : ObjectId(“6114b854117b7214c4a99957”), “num” : 7 }

    查找num小于等于3的文档进行降序排序

    > db.numbers.find({num:{$lte:3}}).sort({num:-1})
    { “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }

    统计个数

    方法count()用于统计结果集中文档条数
    count()方法的语法格式如下:

    db.集合名称.find({条件}).count()

    统计num小于等于3的条数

    > db.numbers.find({num:{$lte:3}}).count()
    3

    db.集合名称.count({条件})

    统计num小于等于5且,_id为 ObjectId(“6114b854117b7214c4a99951”) 的条数

    > db.numbers.count({num:{$lte:5}, _id:ObjectId(“6114b854117b7214c4a99951”)})
    1

    消除重复

    方法distinct()对数据进行去重

    db.集合名称.distinct('去重字段',{条件})

    以下为自定义待查询的数据:

    { “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
    { “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
    { “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
    { “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
    { “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }
    { “_id” : ObjectId(“6114b854117b7214c4a99957”), “num” : 7 }
    { “_id” : ObjectId(“6114b854117b7214c4a999a1”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a999a2”), “num” : 2 }
    { “_id” : ObjectId(“6114b854117b7214c4a999a3”), “num” : 3 }
    { “_id” : ObjectId(“6114b854117b7214c4a999b1”), “num” : 1 }
    { “_id” : ObjectId(“6114b854117b7214c4a999c1”), “num” : 1 }

    查看不重复的num

    > db.numbers.distinct(‘num’)
    [ 1, 2, 3, 4, 5, 6, 7 ]

    查看小于5不重复的num

    > db.numbers.distinct(‘num’,{num:{$lt:5}})
    [ 1, 2, 3, 4 ]

    添加文档

    以下文档可以存储在 MongoDB 的 vvcat 数据库 的 col 集合中:

    使用 insert()添加文档

    > db.info.insert({“name”:“vvcat”, “age”:20})
    WriteResult({ “nInserted” : 1 })
    >db.info.insert({name:“张三”, age:18})
    WriteResult({ “nInserted” : 1 })

    查看已插入文档:

    > db.info.find()
    { “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
    { “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “张三”, “age” : 18 }

    如果插入重复_id的文档会报错:

    > db.info.insert({_id:1,name:“李四”,age:10})
    WriteResult({ “nInserted” : 1 })
    > db.info.find()
    { “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
    { “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “张三”, “age” : 18 }
    { “_id” : 1, “name” : “李四”, “age” : 10 }
    db.info.insert({_id:1,name:“李四”,age:10})

    > db.info.insert({_id:1,name:“李四”,age:20})
    WriteResult({
    “nInserted” : 0,
    “writeError” : {
    “code” : 11000,
    “errmsg” : “E11000 duplicate key error collection: vvcat.info index: id dup key: { _id: 1.0 }”
    }
    })

    使用 save()添加文档

    保存

    • db.集合名称.save(document)
    • 如果文档的_id已经存在则修改,如果文档的_id不存在则添加

    > db.info.save({_id:1,name:“李四”,age:20})
    WriteResult({ “nMatched” : 1, “nUpserted” : 0, “nModified” : 1 })
    > db.info.find()
    { “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
    { “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “张三”, “age” : 18 }
    { “_id” : 1, “name” : “李四”, “age” : 20 }

    注:如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。

    使用 insertOne()添加文档

    > db.collection.insertOne({“a”: 1})
    {
    “acknowledged” : true,
    “insertedId” : ObjectId(“6113c29666d7236471944c09”)
    }
    > db.collection.find()
    { “_id” : ObjectId(“6113c29666d7236471944c09”), “a” : 1 }

    使用 insertMany()插入多条文档

    > db.collection.insertMany([{“b”: 2}, {‘c’: 3}])
    {
    “acknowledged” : true,
    “insertedIds” : [
    ObjectId(“6113c35866d7236471944c0c”),
    ObjectId(“6113c35866d7236471944c0d”)
    ]
    }
    > db.collection.find()
    { “_id” : ObjectId(“6113c29666d7236471944c09”), “a” : 1 }
    { “_id” : ObjectId(“6113c35866d7236471944c0c”), “b” : 2 }
    { “_id” : ObjectId(“6113c35866d7236471944c0d”), “c” : 3 }

    更新文档

    db.集合名称.update(<query>,<update>,{multi:<boolean>})

    • 参数query:查询条件
    • 参数update:更新操作符
    • 参数multi:可选,默认是false,表示只更新找到的第一条记录,值为true表示把满足条件的文档全部更新

    使用update替换一条文档

    > db.info.find()
    { “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
    { “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “张三”, “age” : 18 }
    { “_id” : 1, “name” : “李四”, “age” : 20 }

    把{“name” : “李四”, “age” : 20}的数据替换为{name:‘王五’}

    > db.info.update({name:‘李四’},{name:‘王五’})
    WriteResult({ “nMatched” : 1, “nUpserted” : 0, “nModified” : 1 })
    db.info.find()
    { “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
    { “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “张三”, “age” : 18 }
    { “_id” : 1, “name” : “王五” }

    使用update更新一条文档,把name为张三的数据替换成name为赵六

    > db.info.update({name:‘张三’},{$set:{name:‘赵六’}})
    WriteResult({ “nMatched” : 1, “nUpserted” : 0, “nModified” : 1 })
    > db.info.find()
    { “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
    { “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “赵六”, “age” : 18 }
    { “_id” : 1, “name” : “王五” }

    更新全部
    首先在添加多条文档

    > db.info.find()
    { “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
    { “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “赵六”, “age” : 18 }
    { “_id” : 1, “name” : “王五” }
    { “_id” : ObjectId(“6113ab66a0b643ed938cc2a8”), “name” : “张三”, “age” : 33 }
    { “_id” : ObjectId(“6113ab67a0b643ed938cc2a9”), “name” : “张三”, “age” : 33 }
    { “_id” : ObjectId(“6113ab68a0b643ed938cc2aa”), “name” : “张三”, “age” : 33 }
    { “_id” : ObjectId(“6113ab68a0b643ed938cc2ab”), “name” : “张三”, “age” : 33 }
    { “_id” : ObjectId(“6113ab69a0b643ed938cc2ac”), “name” : “张三”, “age” : 33 }
    { “_id” : ObjectId(“6113ab69a0b643ed938cc2ad”), “name” : “张三”, “age” : 33 }
    { “_id” : ObjectId(“6113ab6aa0b643ed938cc2ae”), “name” : “张三”, “age” : 33 }

    使用{multi:true}参数达到更新多条的目的

    > db.info.update({name:‘张三’},{$set:{name:‘vvcat’}},{multi:true})
    WriteResult({ “nMatched” : 7, “nUpserted” : 0, “nModified” : 7 })
    > db.info.find()
    { “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
    { “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “赵六”, “age” : 18 }
    { “_id” : 1, “name” : “王五” }
    { “_id” : ObjectId(“6113ab66a0b643ed938cc2a8”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab67a0b643ed938cc2a9”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab68a0b643ed938cc2aa”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab68a0b643ed938cc2ab”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab69a0b643ed938cc2ac”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab69a0b643ed938cc2ad”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab6aa0b643ed938cc2ae”), “name” : “vvcat”, “age” : 33 }

    注意:“multi update only works with $ operators”

    删除文档

    db.集合名称.removel(<query>,{justOne:<boolean>})

    • 参数query:可选,删除的文档的条件
    • 参数justOne:可选,如果设为true或1,则只删除一条,默认false,表示删除多条

    > db.info.find()
    { “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
    { “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “赵六”, “age” : 18 }
    { “_id” : 1, “name” : “王五” }
    { “_id” : ObjectId(“6113ab66a0b643ed938cc2a8”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab67a0b643ed938cc2a9”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab68a0b643ed938cc2aa”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab68a0b643ed938cc2ab”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab69a0b643ed938cc2ac”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab69a0b643ed938cc2ad”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab6aa0b643ed938cc2ae”), “name” : “vvcat”, “age” : 33 }

    设置{justOne:true}参数,只删除一条文档

    > db.info.remove({name:‘vvcat’},{justOne:true})
    WriteResult({ “nRemoved” : 1 })
    > db.info.find()
    { “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “赵六”, “age” : 18 }
    { “_id” : 1, “name” : “王五” }
    { “_id” : ObjectId(“6113ab66a0b643ed938cc2a8”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab67a0b643ed938cc2a9”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab68a0b643ed938cc2aa”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab68a0b643ed938cc2ab”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab69a0b643ed938cc2ac”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab69a0b643ed938cc2ad”), “name” : “vvcat”, “age” : 33 }
    { “_id” : ObjectId(“6113ab6aa0b643ed938cc2ae”), “name” : “vvcat”, “age” : 33 }

    删除所有满足条件的数据文档

    > db.info.remove({name:‘vvcat’})
    WriteResult({ “nRemoved” : 7 })
    > db.info.find()
    { “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “赵六”, “age” : 18 }
    { “_id” : 1, “name” : “王五” }

    如果你想删除集合中所有的数据,可以使用以下方式:

    > db.info.remove({})
    WriteResult({ “nRemoved” : 2 })
    > db.collection.find()

    总结:

  • MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

  • 在 MongoDB 中,集合只有在内容插入后才会创建,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。

  • 创建日期语句如下:参数的格式为 YYYY-MM-DD new Date(‘2021-08-11’)

    > new Date(‘2021-08-11’)
    ISODate(“2021-08-11T00:00:00Z”)

  • 每个文档都有一个属性,为_id,保证每个文档的唯一性

  • 可以自己去设置_id插入文档,如果没有提供,那么 MongoDB 为每个文档提供了一个独特的_id,类型为objectID

  • objectID是一个12字节的十六进制数:

    • 前4个字节为当前时间戳
    • 接下来3个字节的机器ID
    • 接下来的2个字节中 MongoDB 的服务进程id
    • 最后3个字节是简单的增量值
  • 文档支持的数据类型

    • Object ID:文档ID
    • String:字符串,最常用,必须是有效的UTF-8
    • Boolean:存储一个布尔值,true 或 false
    • Integer:整数可以是32位或64位,取决于操作系统
    • Double:存储浮点值
    • Arrays:数组或列表,多个值存储到一个键
    • Object:用于嵌入式的文档,即一个值为一个文档
    • Null:存储Null值
    • Timestamp:时间戳,表示从1970-1-1到现在的总秒数
    • Data:存储当前日期或时间的UNIX时间格式
  • 在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。

  • 插入文档也可以使用 db.col.save(document) 命令。

    • db.collection.insert({}) 插入数据,’_id’ 存在就报错
    • db.collection.save({}) 插入数据,’_id’ 存在会更新
  • MongoDB删除文档

    • 1.默认情况会删除所有满足条件的数据。
    • 2.{justOne:true}能达到只删除一条的效果
  • 总结

    以上是生活随笔为你收集整理的MongoDB 增删改查的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。