mongodb简单使用
文章目录
观看该操作前建议先了解 mongodb安装以及权限配置
一、简单认识mongodb
1.1、简单介绍:
MongoDB
是一个NoSQ
L的数据库,是一款文档型数据库,数据库指的就是一个存储数据的仓库,数据库可以使我们完成对数据的持久化的操作。MongoDB
数据库中存储的数据的基本单位就是文档,MongoDB
中存储的就是文档,所谓文档其实就是一个JSON
,MongoDB
中的JSON
我们称为BSON
,比普通的JSON
的功能要更加的强大
MongoDB
数据库使用的是JavaScript
进行操作的,在MongoDB
含有一个对ES标准实现的引擎,在MongoDB
中所有ES
中的语法中都可以使用。
MongoDB
并不需要创建数据库和文档,直接使用use 数据库名
的方式就OK,如果该数据库不存在就自动创建,如果存在就直接切换到该数据库。
1.2、三个概念
- 数据库
database
数据库是一个仓库,在仓库中可以存放集合。
- 集合
collection
集合类似于数组,在集合中可以存放文档。
- 文档
document
文档数据库中的最小单位,我们存储和操作的内容都是文档。
1.3、基本概念
- 文档
document
类似于JS中的对象,在MongoDB
中每一条数
据都是一个文档
- 集合
collection
集合就是一组文档,也就是集合是用来存放文 档的集合中存储的文档可以是各种各样的,没有格 式要求多个文档组成集合,多个集合组成数据库。
一个大的MongoDB
数据库服务器里面可以创建N
个mongodb
数据库,而每个MongoDB
有可以创建N
个集合collection
,每个集合中存储N
个文档,文档是MongoDB
的最小单位。
二、数据库基本指令
- 显示当前的所有数据库
show dbs
或者
show databases
- 进入到指定的数据库中
如果该数据库没有,那么会自动创建该数据库。
use 数据库名
- db表示的是当前所处的数据库
db
- 显示数据库中所有的集合
show collections
三、 MongoDB的CRUD的操作
3.1、插入文档
db.<collection>.insert()
向集合中插入一个或多个文档,当我们向集合中插入文档时,如果没有给文档指定_id
属性,则数据库会自动为文档添加_id
,该属性用来作为文档的唯一标识 _id
。我们可以自己指定,如果我们指定了数据库就不会在添加了,如果自己指定_id
也必须确保它的唯一性。
- 向数据库中插入文档
db.<collection>.insert()
- 插入一个文档对象
db.<collection>.insertOne()
- 插入多个文档对象
db.<collection>.insertMany()
-
范例:
向
test
数据库中的stus
集合插入一个学生对象。当前test
数据库没有,更没有stus
集合。
db ; //admin
//db表示当前当前数据库
db.stus.insert({name:"小男孩",age:18,gender:"男"})
db.stus.insert({name:"猪八戒",age:28,gender:"男"});
//指定 _id插入
db.stus.insert({_id:"hello",name:"猪八戒",age:28,gender:"男"});
//插入多个对象
db.stus.insert([
{name:"沙和尚",age:38,gender:"男"},
{name:"白骨精",age:16,gender:"女"},
{name:"蜘蛛精",age:14,gender:"女"}
]);
//查询全部
db.stus.find();
//生成一个 _id
ObjectId() ;
insert()
和insertOne()
、insertMany()
的区别
其实后两个方法都可以使用 insert()
方法代替,只是后两个在语义上更加清晰,能够一眼看出你操作的对象是几个,时候和 insert()
一样。
3.2、查询文档
- 查询所有
db.collection.find ()
这里的 find()
返回的是一个数组
- 查询数组中第一个数据
db.collection.findOne()
findOne()
返回的是一个对象。
- 查询全不数据条数
db.collection.find({}).count();
或者
db.stus.find().itcount() ;
这里的 find()
表示没有条件查询, find({})
带上一个空条件查询,这两者的写法一样。
3.2.1、简单的条件查询
直接在 find()
或者 findOne()
中直接写入Bson对象作为条件
- 范例:
//查询当前数据库中”stus“集合的所有
db.stus.find();
//查询当前数据库中“stus”集合的 “_id=Hello”的所有数据
db.stus.find({_id:"hello"});
//查询当前数据库中“stus”集合的 “age=16" 并且 "name= 白骨精"的所有数据
db.stus.find({age:16 , name:"白骨精"});
//查询“age=28”的所有数据
db.stus.find({age:28});
//查询 “age=28”的第一个条数据
db.stus.findOne({age:28});
//统计当前数据库中 "stus"集合的所有数据条数
db.stus.find({}).count();
3.3、删除文档
- 删除一个或多个,默认删除多个,删除一个或多个,可以第二个参数传递一个true,则只会删除一个
db.collection.remove()
注意: remove()
必须传递条件,如果 db.stus.remove({})
你直接写成这样,会将这个集合中的所有数据都删除,但是效率稍微有点低,但是集合还在。
例如:
删除第一个“name:蜘蛛精”
db.stus.remove({name:"蜘蛛精"},true)
- 删除一个数据
db.collection.deleteOne()
- 删除多个数据
db.collection.deleteMany()
- 删除集合
db.collection.drop()
- 删除数据库
db.dropDatabase()
注意:如果一个数据库中没有集合,那么这个数据库也就不存在了。
3.4、修改文档
update()默认情况下会使用新对象来替换旧的对象,如果需要修改指定的属性,而不是替换需要使用“修改操作符”来完成修改。
- 修改多个或者一个
db.collection.update()
**注意:**update()默认只会修改一个
如果要想修改多个,必须在增加 multi:true
属性。
例如:将全部 "name=猪八戒"的 address
属性设置为: address:"呵呵呵"
,该属性如果存在就修改,不存在就创建。
db.stus.update(
{"name" : "猪八戒"},
{
$set:{
address:"呵呵呵"
}
} ,
{
multi:true
}
)
- 修改多个
db.collection.updateMany()
- 修改一个
db.collection.updateOne()
- 替换一个文档
db.collection.replaceOne()
- 使用方法
db.collection.update(查询条件,新对象)
3.4.1、简单的修改操作符
$set
可以用来修改文档中的指定属性$unset
可以用来删除文档的指定属性
- 范例:
当前数据
{ "_id" : ObjectId("5de5d2560eb009ec0e93d64d"), "name" : "小男孩", "age" : 18, "gender" : "男" }
{ "_id" : ObjectId("5de60a435bedf1ed7fbd96ce"), "name" : "猪八戒", "age" : 28, "gender" : "男" }
{ "_id" : "hello", "name" : "猪八戒", "age" : 28, "gender" : "男" }
{ "_id" : ObjectId("5de60a9d5bedf1ed7fbd96cf"), "age" : 28 }
{ "_id" : ObjectId("5de60a9d5bedf1ed7fbd96d0"), "name" : "白骨精", "age" : 16, "gender" : "女" }
{ "_id" : ObjectId("5de60a9d5bedf1ed7fbd96d1"), "name" : "蜘蛛精", "age" : 14, "gender" : "女" }
{ "_id" : ObjectId("5de60e275bedf1ed7fbd96d3"), "name" : "猪八戒", "age" : 28, "gender" : "男" }
{ "_id" : ObjectId("5de60e455bedf1ed7fbd96d4"), "age" : 28 }
{ "_id" : ObjectId("5de60e455bedf1ed7fbd96d5"), "name" : "白骨精", "age" : 16, "gender" : "女" }
{ "_id" : ObjectId("5de60e455bedf1ed7fbd96d6"), "name" : "蜘蛛精", "age" : 14, "gender" : "女" }
{ "_id" : ObjectId("5de61b865bedf1ed7fbd96d7"), "name" : "沙和尚", "age" : 38, "gender" : "男" }
{ "_id" : ObjectId("5de61b865bedf1ed7fbd96d8"), "name" : "白骨精", "age" : 16, "gender" : "女" }
{ "_id" : ObjectId("5de61b865bedf1ed7fbd96d9"), "name" : "蜘蛛精", "age" : 14, "gender" : "女" }
1、修改“沙和尚”的年龄为28
db.stus.update({name:"沙和尚"},{age:28});
注意:update(查询条件,修改后的数据)
默认只会修改第一个,并且上面这条命令是直接将新的对象替换掉原来的对象。直接这样只执行,后面的 name
、 gender
属性都没有了。
如果只想修改”沙和尚“的age
等于28,而其他字段不更改的情况,需要这样修改。
db.stus.update({name:"沙和尚"},{$set:{age:28}})
2、修改 _id
等于 5de60e275bedf1ed7fbd96d3
的gender
等于"男",添加 address
字段,并且设置该字段值为: address:“流沙河”
db.stus.update(
{"_id" : ObjectId("5de60e275bedf1ed7fbd96d3")},
{$set:{
gender:"男",
address:"流沙河"
}}
)
3、删除 _id
等于 5de60e275bedf1ed7fbd96d3
中的 address
字段
db.stus.update(
{"_id" : ObjectId("5de60e275bedf1ed7fbd96d3")},
{$unset:{
address:0 //这里的0 可以随便写个数字
}}
)