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
集合
关于集合的基础命令
-
不手动创建集合:
向不存在的集合中第一次加入数据时,集合会被创建出来 -
手动创建集合:
- 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()
总结:
-
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}能达到只删除一条的效果