MongoDB
是一个NoSQ
L的数据库,是一款文档型数据库,数据库指的就是一个存储数据的仓库,数据库可以使我们完成对数据的持久化的操作。MongoDB
数据库中存储的数据的基本单位就是文档,MongoDB
中存储的就是文档,所谓文档其实就是一个JSON
,MongoDB
中的JSON
我们称为BSON
,比普通的JSON
的功能要更加的强大
MongoDB
数据库使用的是JavaScript
进行操作的,在MongoDB
含有一个对ES标准实现的引擎,在MongoDB
中所有ES
中的语法中都可以使用。
MongoDB
并不需要创建数据库和文档,直接使用use 数据库名
的方式就OK,如果该数据库不存在就自动创建,如果存在就直接切换到该数据库。
database
数据库是一个仓库,在仓库中可以存放集合。
collection
集合类似于数组,在集合中可以存放文档。
document
文档数据库中的最小单位,我们存储和操作的内容都是文档。
document
类似于JS中的对象,在MongoDB
中每一条数
据都是一个文档
collection
集合就是一组文档,也就是集合是用来存放文 档的集合中存储的文档可以是各种各样的,没有格 式要求多个文档组成集合,多个集合组成数据库。
一个大的MongoDB
数据库服务器里面可以创建N
个mongodb
数据库,而每个MongoDB
有可以创建N
个集合collection
,每个集合中存储N
个文档,文档是MongoDB
的最小单位。
show dbs
或者
show databases
如果该数据库没有,那么会自动创建该数据库。
use 数据库名
db
show collections
db.
向集合中插入一个或多个文档,当我们向集合中插入文档时,如果没有给文档指定_id
属性,则数据库会自动为文档添加_id
,该属性用来作为文档的唯一标识 _id
。我们可以自己指定,如果我们指定了数据库就不会在添加了,如果自己指定_id
也必须确保它的唯一性。
db..insert()
db..insertOne()
db..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()
一样。
db.collection.find ()
这里的 find()
返回的是一个数组
db.collection.findOne()
findOne()
返回的是一个对象。
db.collection.find({}).count();
或者
db.stus.find().itcount() ;
这里的 find()
表示没有条件查询, find({})
带上一个空条件查询,这两者的写法一样。
直接在 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();
db.collection.remove()
注意: remove()
必须传递条件,如果 db.stus.remove({})
你直接写成这样,会将这个集合中的所有数据都删除,但是效率稍微有点低,但是集合还在。
例如:
删除第一个“name:蜘蛛精”
db.stus.remove({name:"蜘蛛精"},true)
db.collection.deleteOne()
db.collection.deleteMany()
db.collection.drop()
db.dropDatabase()
注意:如果一个数据库中没有集合,那么这个数据库也就不存在了。
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(查询条件,新对象)
$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 可以随便写个数字
}}
)