这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战css
语法格式:db.collectionName.insert(文档)
html
db
是当前操做的数据库collectionName
是操做的集合,没有会自动建立_id
属性,会自动建立例如在user
集合下插入单个文档html5
db.user.insert({name:"ljc",love:["soccer","music"]})
复制代码
在可视化工具中实操的结果,在命令行中结果一致!node
在 MongoDB3.2 以后的版本中,提供了
insertOne()
函数用于插入文档,同时废弃了save
函数,所以就不学习它了,它的使用方法和insert
相同webpack
语法格式:db.COLLECTION_NAME.insertOne(document)
web
例如在user
集合下插入单个文档正则表达式
db.user.insertOne({name:"ddd",love:["play game","running"]})
复制代码
在可视化工具中实操的结果,在命令行中结果一致!shell
向集合中批量插入多个文档时,须要使用数组来存放文档数据库
语法格式:db.COLLECTION_NAME.insert([{},{},{}…])
数组
例如采用insert
在user
中批量插入人员信息
db.user.insert([{name:"张三",age:"18"},{name:"李四",age:"19"}])
复制代码
语法格式:db.COLLECTION_NAME.insertMany([{},{},{}…])
例如采用insertMany
在user
中批量插入人员信息
db.user.insertMany([{name:"王五",age:"28"},{name:"唐六",age:"29"}])
复制代码
db.COLLECTION_NAME.insertOne(document)
db.COLLECTION_NAME.insertMany(document)
db.COLLECTION_NAME.replaceOne(document)
复制代码
参数说明
document
:要写入的文档writeConcern
:写入策略,默认为 1,即要求确认写操做,0 是不要求ordered
:指定是否按顺序写入,默认 true,按顺序写入MongoDB
经过update
函数或者save
函数来更新集合中的文档。
update()
函数用于更新已存在的文档。
语法格式为:
db.COLLECTION_NAME.update(query,update,options)
复制代码
query
: update
的查询条件,根据这个来选择须要更新的数据update
:update
的对象和一些更新的操做符upsert
:可选参数,意思是若是不存在须要更新的数据,是否要做为新数据插入集合中,参数值为true
或者false
,默认值是false
,不插入multi
:可选参数,是否批量更新,意思是当查询到多个符合查询条件的数据时,是否要所有更新,仍是只更新第一条,默认是false
writeConcern
:可选参数,抛出异常的级别实操
首先咱们在user
集合下插入一些数据
db.user.insertMany([{title:"html",page:300},{title:"css",page:300},{title:"js",page:200},{title:"ts",page:250},{title:"webpack",page:220}])
复制代码
插入成功
接下来咱们来对集合中的数据进行更新
第一个需求:将html
的page
改为500
db.user.update({title:"html"},{title:"html",page:500})
复制代码
特别注意:更新文档是更新整个文档的操做,即便只须要修改一个值,其余属性同样须要写下来,否则其余属性将被删除
第二个需求:将全部page为200的改成400
db.user.update({page:200},{$set:{page:400}},{multi:true})
复制代码
操做结果
在上面采用了$set
操做符,用来只更新数据中的某个属性
db.collection.updateOne()
向指定集合更新单个文档
db.collection.updateMany()
向指定集合更新多个文档
用来指定一个键并更新键值,若键不存在则建立。也就是咱们能够经过这个操做符,指定咱们须要修改的属性,而不用更新整个文档
语法格式:db.COLLECTION_NAME.update({查询条件},{更新操做符:{更新内容}})
将html
改为html5
db.user.update({title:"html"},{$set:{title:"html5"}});
复制代码
这样咱们就将查找到的文档中的某个数据修改,而不删除其余数据
若是数据未被找到,则新建新增数据
对文档中知足要求的数字型的值进行增减操做,正则增,负则减
db.user.updateOne({title:"js"},{$inc:{page:-20}})
复制代码
将title
为js
的数据的page
属性进行减20的操做
用来删除键,让键的值为空。在编写命令时$unset里更改数据取值任意,不管给定什么值都表示删除。
删除html
的page
db.user.update({title:"html"},{$unset:{page:"aaaa"}});
复制代码
这里插入一个点:若是须要更改所有数据,咱们的
query
属性填{}
便可,也就是查找所有
向文档的某个数组类型的键添加一个数组元素,不过滤重复的数据。键不存在,则建立数组类型的键
给全部的文档添加一个auth
字段,值为ljc
db.user.update({},{$push:{auth:"ljc"}},{multi:true});
复制代码
从结果来看是添加成功,须要注意的是,数组,数组,数组!
删除数据中数组元素,取值只能是1或-1,1表示尾部删除,-1表示头部删除
首先咱们先push
一下,让数组丰富一点,给html
添加多一个auth
db.user.update({title:"html"},{$push:{auth:"htmlauth"}});
复制代码
接下来演示pop
操做,删除html
中auth
数组的第一个值
db.user.update({title:"html"},{$pop:{auth:-1}})
复制代码
从数组中删除知足条件的元素,只要知足条件都删除
删除auth
数组中元素内容为ljc
db.user.update({title:"js"},{$pull:{auth:"ljc"}})
复制代码
能够同时删除数组中的多个值
将ts
中auth
中ljc以及ccc
删除掉
db.user.update({title:"ts"},{$pullAll:{auth:["ljc","ccc"]});
复制代码
对键进行从新命名。任何类型的键都能重命名
将全部title
的属性名改为name
db.user.update({},{$rename:{title:"name"}},{multi:true})
复制代码
成功将改为了name
语法格式:
db.user.remove(<query>,{justOne:<boolean>})
复制代码
参数说明:
query
:可选删除的文档条件justOne
:删除多个或者一个文档。true
只删除一个,false
删除全部匹配的数据删除name
值为html
的文档
db.user.remove({name:"html"},{justOne:true})
复制代码
成功删除
删除全部数据
db.user.remove({})
复制代码
注意:remove
丰富不会真正的释放空间,须要执行db.repairDatabase()
来回收磁盘空间
该方法只删除知足条件的第一条文档,相对于remove
简洁了不少
删除js
db.user.deleteOne({name:"js"})
复制代码
删除知足条件的全部文档
删除全部page
为200
的文档
db.user.deleteMany({page:200})
复制代码
查询文档采用find
函数
语法格式
db.collection.find(query, projection)
复制代码
query
:可选,指定查询的条件projection
:可选,使用投影操做符指定返回的键**注意:**能够经过db.collection.find().pretty()
方法以易读的方式来读取数据
一样的可使用
findOne
方法,返回一个文档
查询全部文档
db.user.find({})
复制代码
根据名字去重
db.user.distinct("name")
复制代码
注意:MongoDB中使用方法通常都要$
号开头
采用条件操做符用于比较两个表达式,再从集合中获取数据
语法格式:find({键:{操做符:条件}})
findOne
也能够噢~
等于操做符
查询全部page
为300的文档对象
db.user.find({page:{$eq:300}})
复制代码
小于操做符
查询page
小于300
的文档对象
db.user.find({page:{$lt:300}})
复制代码
小于或等于操做符
查询page
小于等于300
的文档对象
db.user.find({page:{$lte:300}})
复制代码
大于操做符
查询page
大于250
的文档对象
db.user.find({page:{$gt:250}})
复制代码
大于等于操做符
查询page
大于等于300
的文档对象
db.user.find({page:{$gte:300}})
复制代码
不等于操做符
查询page
不等于300
的文档对象
db.user.find({page:{$ne:300}})
复制代码
多条件查询,只要知足in
中其中一个条件,就能被查询出来
查询page
为220
和300
的文档对象
db.user.find({page:{$in:[300,220]}})
复制代码
注意:$in后面的值是一个数组类型!!
于in
相反,除了in
中的都查询出来
查询page
不为220
和300
的文档对象
db.user.find({page:{$nin:[300,220]}})
复制代码
查找同时知足多个条件的文档对象
语法格式:
db.col.find({$and:[{条件一},{,条件二},…]})
复制代码
查询page
为300
而且name
值为node
的文档
db.user.find({$and:[{name:"node"},{page:300}]})
复制代码
当同时指定多个查询条件时,默认是并列关系,所以咱们能够直接写
db.user.find({name:"node"},{page:300})
复制代码
查询至少知足多个条件中其中一个的文档对象
查询page
为300
或者name
值为node
的文档
db.user.find({$or:[{name:"node"},{page:300}]})
复制代码
根据值类型来查询
查询page
为的值类型为number
的值
db.user.find({page:{$type:"number"}})
复制代码
数据类型以下,来自菜鸟教程
可使用类型对应的数字来指定
db.col.find({"title" : {$type : 2}})
等价于
db.col.find({"title" : {$type : 'string'}})
复制代码
利用正则表达式来查询特定格式的文档
查询name
以s
结尾,不区分大小写的文档
db.user.find({name:/s$/i})
复制代码
只选择文档中的部分数据,而不是整个文档所有数据
在
find()
方法中默认会显示一个文档中的所有字段,要限制这点只须要设置字段列表值0
或1
只显示name
值,同时不显示_id
db.user.find({},{_id:0,name:1})
复制代码
显示name
和page
db.user.find({},{page:1,name:1})
复制代码
注意:
_id
字段是默认存在的!!
不显示name
和page
db.user.find({},{page:0,name:0})
复制代码
特别注意:只有在设置_id:0
,的状况下才容许属性值不一样,也就是对于除_id
之外的数据,不容许同时一个设置1
,一个设置0
例如:
db.user.find({},{_id:0,page:1,name:0})
复制代码
报错
在咱们的数据集中,经常会有数组的存在,所以,查询数组也是很重要的
auth
数组中有ljc
的文档db.user.find({auth:"ljc"})
复制代码
auth
数组中既有ljc
又有cssauth
的文档db.user.find({auth:{$all:["ljc","cssauth"]}})
复制代码
auth
数组中第二个元素为ljc
的文档经过
auth.1
来指定数组的第二个元素
db.user.find({"auth.1":"ljc"})
复制代码
auth
数组中第一个到第二个元素(其余字段保留)db.user.find({},{auth:{$slice:[0,2]}})
复制代码
auth
数组中最后一个元素db.user.find({},{auth:{$slice:-1}})
复制代码
采用sort
方法,根据数据进行排序,使用1
和-1
来指定排序方式为升序仍是降序
根据page
有小到大进行排序
db.user.find().sort({page:1})
复制代码
使用limit()
方法来读取指定数量的数据外,再使用skip()
方法来跳过指定数量的数据
语法格式:
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
复制代码
实例
db.user.find.limit(2).skip(0) #前两个
db.user.find.limit(2).skip(2) #3,4
复制代码
count
用来计算符合条件的值有多少个
统计page
中小于270
的有多少个
db.user.count({"page":{$lt:270}})
复制代码