MongoDB 增删改查

Posted ʚVVcatɞ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB 增删改查相关的知识,希望对你有一定的参考价值。

学习目标:

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

集合

关于集合的基础命令

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

  2. 手动创建集合:

  • 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 }

范围运算符

使用 “ i n " , " 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()

总结:

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

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

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

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

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

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

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

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

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

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

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

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

以上是关于MongoDB 增删改查的主要内容,如果未能解决你的问题,请参考以下文章

Javaweb实现对mongodb的增删改查(附带源代码)

Java操作MongoDB增删改查完美Demo

测开之路五十一:代码实现MongoDB增删改查

MongoDB java API 实现增删改查

[MongoDB]增删改查

mongodb增删改查