入门语法
包括安装,增删改查,基本语法,备份与恢复
安装
1.官网下载压缩包,解压至预定文件路径;或者msi文件自行安装即可。
2.配置环境变量:将mongodb的bin目录配置到环境变量的path中,或者新建MONGODB_HOME再配置到path中。(非必需)
3.新建文件夹(如:c:\data\db)作为存放mongo的数据存放位置,然后在CMD窗口中执行:mongod --dbpath=c:\data\db
(启动服务端,并指定数据存放位置)。执行完后发现文件夹下有了数据,此步骤同时表示启动了服务端。
4.如未执行第二步,则需要在mongdb安装目录的bin目录下,启动CMD,再执行步骤3
5.mongodb默认端口是27017,以上Mongod命令启动后窗口不能关闭,否则会导致链接时出现10061错误,所以要新开启一个窗口执行:mongo localhost:27017
,表示客户端连接
注:mongodb可以不设账号密码,通过IP地址和端口直接链接。退出输入:exit
mongodb概念与MySQL对比
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
mongodb常见数据类型
数据类型 | 描述 |
String | 字符串,务必使用utf-8编码 |
Integer | 整型,存储数值 |
Boolean | 布尔值 |
Double | 双精度浮点值。用于存储浮点值 |
Null | 用于创建空值 |
Arrays | 用于将数组或列表或多个值存储为一个键 |
操作数据库语法
db.createUser
创建用户show dbs
:查看当前用户权限下所有的数据库db
:查看当前窗口所在的数据库use db_name
:切换到指定数据库。如果数据库不存在,则自动创建数据库db.dropDatabase()
:删除当前数据库db.createCollection("collectionName")
:创建一个名为collectionName的集合,创建完成后会返回 {“ok”,1} json串show collections
:查看集合db.collection1.count()
:统计集合collection1中的数据数量db.collection1.drop()
:删除集合collection1
数据库内容添加(插入操作)
db.COLLECTION1.insert(document)
:向collection1中插入数据,数据形式类似json格式,由键值对构成。
例:db.collection1.insert({name:'sss',age:'15'})
向collection1中插入一条数据
3.2 版本后还有以下几种语法可用于插入文档:
db.collection.insertOne():向指定集合中插入一条文档数据
db.collection.insertMany():向指定集合中插入多条文档数据
数据库内容修改(更新操作)
update()语句
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数说明:
-
query
: update的查询条件,类似sql update查询内where后面的。 update
: update的对象和一些更新的操作符(如$set
,$inc
…)等,也可以理解为sql update查询内set后面的
-
$set
:用法:{$set:{field:value}}——作用:把文档中某个字段field的值设为value。 -
$inc
:用法:{$inc:{field:value}}——作用:将数字字段field增加value -
$unset
:用法:{$unset:{field:1}}——作用:删除某个字段field,1代表状态true -
$push
:用法:{$push:{field:value}}——作用:把value追加到field里。注:field只能是数组类型,如果field不存在,会自动插入一个数组类型
-
upsert
: 可选,这个参数的意思是,如果不存在update的记录,是否插入该updata数据,true为插入,默认是false,不插入。 -
multi
: 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,则更新所有纪录。
例:db.collections.update({'age':16},{$set:{'age':18}},{multi: true})
:将所有age为16的数据,改为18。
save()语句
db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})
通过给定的_id值,添加或替换数据。
数据库内容删除(删除操作)
删除所有文档
db.collection_name.deleteMany()
删除自动集合内所有数据
删除满足条件的所有文档
db.users.deleteMany(<query>)
仅删除第一个满足条件的文档
db.users.deleteOne(<query>)
remove() 方法(旧版本)
db.collection.remove(
<query>,
{
justOne: <boolean>
}
)
参数说明:
- query:必选项,是设置删除的文档的条件。
- justOne:可选项,默认为false,删除符合条件的所有文档,如果设为 true,则只删除一个文档。
数据库内容查询(查询操作)
db.collection.find(query, projection).pretty()
查询满足条件的第一条数据db.collection1.findOne()
:查询满足条件的第一条数据
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)
- pretty提高可读性
例:db.collection1.find({age:7,name:"xiaomu"},{name:1,age:1})
:查询age为7,name为xiaomu的数据,返回name和age字段;如果name后面的1改为0则表示不返回name字段,返回除name字段以外的其他字段,此时不能再设置其他字段为1。
条件运算符
操作 | 格式 | 范例 | RDBMS中的类似语句 |
等于 |
| db.col.find({“by”:“value”}).pretty() | where by = ‘value’ |
小于 |
| db.col.find({“likes”:{$lt:50}}).pretty() | where likes < 50 |
小于或等于 |
| db.col.find({“likes”:{$lte:50}}).pretty() | where likes <= 50 |
大于 |
| db.col.find({“likes”:{$gt:50}}).pretty() | where likes > 50 |
大于或等于 |
| db.col.find({“likes”:{$gte:50}}).pretty() | where likes >= 50 |
不等于 |
| db.col.find({“likes”:{$ne:50}}).pretty() | where likes != 50 |
AND与OR与in
and条件
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。db.col.find({key1:value1, key2:value2}).pretty()
or条件
or单纯换为and即代表and条件
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
注意or后语句使用[...]
包裹
in条件
满足其中一个元素的数据。
例:db.user.find({age: { $in:[13,73]}})
查找age为13或73的数据。
Limit方法与Skip方法与sort方法
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER).sort({key:1})
limit与skip位置无前后之分。
limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
skip()方法接受一个数字参数,作为跳过的记录条数。
sort()对指定的参数进行排列,其中 1 为升序排列,而 -1 是用于降序排列。
skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。
聚合相关操作
aggregate()方法
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
例:db.collection_name.aggregate([$group:{_id:'$user',num_tutorial:{$sum:1}])
根据user分组,并计数。
_id是固定用法,不能改名。
$group函数
需要被[]包裹
聚合函数
表达式 | 描述 |
$sum | 计算总和。 |
$avg | 计算平均值 |
$min | 获取集合中所有文档对应值得最小值。 |
$max | 获取集合中所有文档对应值得最大值。 |
$push | 在结果文档中插入设定值到一个数组中。 |
$addToSet | 在结果文档中插入设定值到一个数组中,但不创建副本。 |
$first | 根据分组内容的排序获取第一个文档数据。 |
$last | 根据分组内容的排序获取最后一个文档数据 |
管道功能
将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
常用函数:
-
$project
:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。 -
$match
:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。 -
$limit
:用来限制MongoDB聚合管道返回的文档数。 -
$skip
:在聚合管道中跳过指定数量的文档,并返回余下的文档。 -
$group
:将集合中的文档分组,可用于统计结果。 -
$sort
:将输入文档排序后输出。
MongoDB 正则表达式
MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式。
正则表达式中使用变量,要使用eval将组合的字符串进行转换。如:name:eval("/"+age+"/i")
语法形式:
regex操作符:
{<field>:{$regex:/pattern/,$options:’<options>’}}
{<field>:{$regex:’pattern’,$options:’<options>’}}
{<field>:{$regex:/pattern/<options>}}
正则表达式对象:
{<field>: /pattern/<options>}
regex与正则表达式对象的区别:
- 在KaTeX parse error: Expected '}', got 'EOF' at end of input: …式对象,例如:`{name:{in:[/joe/i,/jack/}}`
- 在使用隐式的
regex,例如:
{name:{$regex:/^jo/i, $nin:['john']}}
- 当option选项中包含X或S选项时,只能使用KaTeX parse error: Expected '}', got 'EOF' at end of input: …gex,例如:`{name:{regex:/m.*line/,$options:“si”}}`
例:db.collection_name.find({name:{$regex:'ss',$options:'$i'}})
查找name包含ss字符串的所有结果,且忽略大小写。
备份与恢复
备份
mongodump -h dbhost -d dbname -o dbdirectory
参数解释:
- -h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
- -d:需要备份的数据库实例,例如:test
- -o:备份的数据存放位置,例如:c:\data\dump,该目录需提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
恢复
mongorestore -h <hostname><:port> -d dbname <path>
参数解释:
- -h :MongoDB所在服务器地址,默认为: localhost:27017。
- -d :设定恢复后数据库名。
- :设置备份数据所在位置,例如:c:\data\dump\test