MongoDB 数据库操作
一、MongoDB 数据库操作
1、创建数据库
use 命令表示切换数据库,如果数据库不存在会创建数据库。
use 数据库名
2、显示数据库
通过 show dbs 或 show databases 查看数据库
注意
1.不同的角色看见的数据库时不一样的,管理员看见所有数据库,普通用户只能看见自己的数据库
2.创建新的数据库里面没有数据时,通过 show dbs 或 show databases 是无法查看到的。需要向数据库新增一个 document(db.test.insert({"key":"value","key2":"value2"})),才能看到
3、删除数据库
删除数据库需要切换到需要删除的数据库中,且登录用户具有 dbAdminAnyDatabase 权限,执行 db.dropDatabase()。
use test
db.dropDatabase()
二、MongoDB 集合操作
1、创建集合
MongoDB 中的集合是一组文档的集,相当于关系型数据库中的表。
MongoDB 使用 db.createCollection()
函数来创建集合
语法格式:db.createCollection(name,options)
。name
:要创建的集合名称options
:可选参数,指定有关内容大小及索引的选项
MongoDB 其实不需要显式的去创建集合,当使用
use test
db.table1.insert()
就能隐式的创建 table1 集合
创建一个默认选项的集合命令如下:
>db.createCollection("c1")
{"ok":1}
>db.c1.insert("a":"1")
>show tables
c1
>
# 方式一:
db.c2.insert({"a":"1"}) # 当第一个文档插入时,集合就会被创建,并包含该文档
# 方式二:
db.c3 # 创建一个空集合,里面没有数据时通过 show tables 或 show collections 是无法查看到的。需要向集合插入一个文档才能看见。
2、查看集合
通过 show tables
或 show collections
查看所有集合
> show tables;
user
> db.c1.insert({"a":1})
WriteResult({ "nInserted" : 1 })
> show tables;
c1
user
> show collections
c1
通过 db.COLLECTION_NAME.stats()
查看集合详情
>db.c3.stats()
3、删除集合
通过 db.COLLECTION_NAME.drop()
删除集合
> show collections
c1
user
> db.c1.drop()
true
> show collections
user
>
三、Document 操作
1、插入文档
1.1、单条插入
可以使用 insert/insertOne/save
插入单条文档:
- db.c1.insert({“name”:”a”})
- db.c1.insertOne({“name”:”a”})
- db.c1.save({“name”:”a”})
1.1.1、insert
通过 db.COLLECTION_NAME.insert(document)插入文档。
插入文档时如果没有指定_id
则默认为OjectId
类型,_id
不能重复,且在插入后不可变
user1 = {
"name":"zhangsan",
"age":18,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"BJ"
}
}
db.user.insert(user1)
1.1.2、insertOne
在 mongoDB 3.2 版本后提供了insertOne()
函数用于插入单条文档
user2 = {
"_id":"2",
"name":"lisi",
"age":20,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"SH"
}
}
db.user.insertOne(user2)
1.1.3、save
插入文档也可以使用 db.COLLECTION_NAME.save(document)
命令
如果不指定_id
字段save()
方法等同于insert()
方法。如果指定_id
字段,则变为更新文档操作
user3 = {
"_id":"3",
"name":"wangwu",
"age":22,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"JS"
}
}
db.user.save(user3)
1.2、批量插入
可以使用 insert/insertMany/save
插入多条文档。区别在于把单条插入时函数的对象类型{}
变成数组类型[{},{}]
:
db.c1.insert([{name:"a"},{name:"b"}])
db.c1.insertMany([{name:"a"},{name:"b"}])
db.c1.save([{name:"a"},{name:"b"}])
1.2.1 insert
user1 = {
"_id":1,
"name":"zhangsan",
"age":22,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"JS"
}
}
user1 = {
"_id":2,
"name":"lisi",
"age":22,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"NJ"
}
}
...
db.user.insert([user1,user2,user3,user4,...])
1.2.2 save
db.user.insertMany([user1,user2,user3,user4,...])
1.2.3 save
db.user.save([user1,user2,user3,user4,...])
2、更新文档
2.1、update 函数
通过 update
系列函数或者 save
函数可以更新集合中的文档。我们来详细看下update
函数的使用。
update()
函数用于更新已存在的文档,语法格式如下:
db.COLLECTION_NAME.update(query,update,options)
query
: update 的查询条件,类似 SQL update 语句中 where 部分update
: updte 的对象和一些更新的操作符(如$,Sinc…)等,也可以理解为 SQL update 语句总的 set 部分upsert
: 可选,如果不存在 update 的文档,是否插入该文档。true为插入,默认为false,不插入multi
: 可选,是否批量更新。true 表示按条件查询出来的多条记录全部更新,false 只更新找到的第一条记录,默认是false
user = {
"name":"wangwu",
"age":20,
"hobbiess":["mucis","read"],
"addr":{
"country":"China",
"city":"BJ"
}
}
# 修改单条
db.user.updateOne({"name":"lisi"},user)
# 查到到的匹配数据如果多条,只会修改第一条
db.user.update({"name":"lisi",user}) # 修改单条等价于 updateOne()
# 查到到的匹配数据如果多条,修改所有匹配的数据
db.user.update({"name":"lisi"},{"$set":user},false,true) # 修改多条
db.user.updateMany({"name":"lisi"},{"$set":user}) # 修改多条
注意:更新文档是整个文档的操作,如果修改的值只有 name 和 age,除了 _id
以外的其它属性将会被删除
2.2、更新操作符
2.2.1、$set 操作符
# 更新
db.user.update({"name":"zhangsan"},{$set:{age:18}},{multi:true})
2.2.2、$inc 操作符
# 年龄加5
db.user.update({"name":"wangwu"},{$inc:{age:5}})
2.2.3、$unset 操作符
# 用来删除键,让键的值为空,在编写命令时$unset里field取值任意,无论给什么值都表示删除
db.user.update({name:"wangwu"},{$unset:{address:"随意"}})
2.2.4、$push 操作符
# 向文档某个数组类型的键添加一个数组元素,不过滤重复的数据。添加时键存在,要求键值类型必须时数组;键不存在,则创建数组类型的键
db.user.update({},{$push:{hobby:"写代码"}},{multi:true})
2.2.5、$pop 操作符
# 删除数据元素,可取的值只能是 1 或 -1。1表示尾部删除,-1表示头部删除
# 删除 hobby 中第一个元素。其中 $pop 中的 key 是要操作的数组类型属性
db.user.update({"name":"lisi"},{$pop:{hobby:-1}})
2.2.6、$pull 操作符
# 从数组中删除满足条件的元素,只要满足条件都删除
db.user.update({name:"wangwu"},{$pull:{hobby:"test"}})
2.2.7、$pullAll 操作符
# 可以设置多个条件
db.user.update({name:"wangwu"},{$pull:{hobby:["test1","test2"]}})
2.2.8、$rename
# 对键进行重命名,任何类型的键都能重命名
db.user.update({name:"wangwu"},{$rename:{name:"username"}})
3、删除文档
3.1、MongoDB remove()
函数是用来移除集合中的数据,其语法格式如下所示:
db.user.remove(<query>,{justOne:<boolean>})
- query:(可选)删除的文档的条件
- juistOne:(可选)如果设为 true,则只有一个文档,False删除所有匹配的数据等价于 db.user.deleteOne():删除符合条件的第一个文档
db.user.remove({"name":"lisi"},{justOne:true}) db.user.deleteOne({"name":"lisi"})
3.2、删除所有数据命令:
db.user.remove({})
等价于
清空该集合(表)
db.user.deleteMany({})
# 有嵌入文档,且内容含有"country":"China"的全部删除
db.user.deleteMany({"addr.country":"China"})
# 删除 id 大于等于 3 的所有文档
db.user.deletemany({"_id":{"$gte":3}})
# 删除所有
db.user.remove({})
db.user.deleteMany({})
本作品采用《CC 协议》,转载必须注明作者和本文链接