mongodb基本指令操作
2016-02-16 19:32
711 查看
MongoDB链接:
使用命令: mongo
创建数据库[b]:[/b]
(创建数据库名称为:db_mxd):
使用命令: use db_mxd
[说明] use指令,如果数据库不存在,则创建数据库,如果存在,则切换到该数据库;
删除数据库:
使用命令:首先使用use切换到要删除的数据库,然后再使用 db.dropDatabase()
插入文档:
使用指令: db.COLLECTION_NAME.insert(document)
[说明] COLLECTION_NAME为数据插入的数据集的名称, 在插入之前同样需要使用use指定插入的数据库。
【注意】插入数据也可以使用db.COLLECTION_NAME.save(document),如果不指定_id,save方法和insert方法一样,如果指定了_id则会更新该_id对应的文档。
更新文档:
使用指令:
db.COLLECTION_NAME.update(
<query>,
<update>,
{
upsert : <boolean> ,
multi : <boolean> ,
writeConcern : <document>
})
【说明】query: 为update的查询条件,通过query指定需要更新的是哪个文档;
update:为需要修改的文档的修改之后的内容;
upsert:可选参数,为检测到文档不存在时是否插入新的文档,=true则插入,=false则不插入
multi:可选参数,默认false,只更新query匹配出的第一条数据,若设置为true,则会更新满足query的所有数据记录
writeConcern:可选参数,抛出异常的级别
>>>update前的数据:
>>>update之后的数据:
删除文档:
使用指令:
MongoDB的版本是version2.6之前,使用:
db.COLLECTION_NAME.remove(<query> , <justOne>)
MongoDB的版本号在2.6以后的,需要使用:
db.COLLECTION_NAME.remove(
<query> ,
{
justOne: <boolean>,
writeConcern : <document>
})
【说明】query: 可选参数,匹配需要删除的document
justOne: 可选参数,设置justOne为1或者true,表示只删除一条文档,否则删除所有可以匹配到的文档
writeConcern:抛出异常的级别
【注意】 db.COLLECTION_NAME.remove() 表示删除数据集COLLECTION_NAME中的所有文档
查询文档:
使用指令:db.COLLECTION_NAME.find()
如果想要让查询到的数据容易读,可以使用db.COLLECTION_NAME.find().pretty()
Mongo中的查询语句和SQL语言
在Mongodb中使用AND进行查询的语句如下:
db.COLLECTION_NAME.find({ key1 : value1 , key2 : value2 , key3 : value3 , .... })
(查询name=‘MXD’,并且age=23的文档)
在Mongodb中使用OR进行查询的语句如下:
db.COLLECTION_NAME.find({ $or: [ { key1: value1 }, { key2: value2} , { key3: value3 }, ...... ] })
(查询name='Jake'或者age=23的文档内容)
在MongoDB中使用OR和AND进行联合查询:
(在age>23的文档中查询name='MXD'而且school=‘hust’的文档)
【注意】一种常用的查询办法:
【>>>说明<<<】
find()中的第一个{},表示查找所有的文档记录,第二个{}内指定返回那些数据,age:1 和school:1表示结果中需要返回的字段,find()默认必定会返回ObjectId(即_id),如果不想返_id字段,可以使用_id:0
MongoDB中的条件操作符:
使用到的条件操作符有:
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte
>>大于操作符(>): db.COLLECTION_NAME.find({ age : { $gt : 20 } })
>>大于等于操作符(>=): db.COLLECTION_NAME.find({ age : { $gte : 20 } })
>>小于操作符(<): db.COLLECTION_NAME.find({ age : { $lt : 20} })
>>小于等于操作符(<=): db.COLLECTION_NAME.find({ age : { lte : 20 } })
>>使用大于(>)和小于(<)进行查询: db.COLLECTION_NAME.find({ age : { $gt : 20 , $lt : 22 } })
MongoDB中的$type类型检测符:
$type是MongoDB中基于BSON来检测字段类型的,并返回检测到的结果。
在MongoDB中查找age字段的类型是String类型的文档:db.COLLECTION_NAME.find({ age : { $type : 2 }})
MongoDB查询中使用Limit()和Skip()限制符:
db.COLLECTION_NAME.find().limit(NUMBER): 在数据集中查找最多前NUMBER条数据
db.COLLECTION_NAME.find().skip(NUM) : 在数据集中跳过前NUM条数据,查询得到后面的数据
db.COLLECTION_NAME.find().limit(NUM_1).skip(NUM_2): 在数据集中,跳过前面的NUM_2条数据,最多查询获得后面NUM_1条数据
【说明】在数据集collection_people中,从第二条(跳过了前1条数据)开始,查询获得了一条数据。
MongoDB数据的排序:
使用指令:db.COLLECTION_NAME.find().sort({ KEY: 1 })
【说明】KEY表示需要排序的字段,1表示按照升序排列,-1表示按照降序排列
MongoDB使用ensureIndex创建索引:
创建指令: db.COLLECTION_NAME.ensureIndex({ KEY : 1 })
【说明】KEY为要创建为索引的字段,1是指按照升序创建,-1指按照将序创建。
ensureIndex()创建索引接收一些可选参数:
在后台进行索引的创建:
设置background:true是因为,创建索引会阻塞数据库,若设置background:true则会在后台创建,而不会阻塞数据库。
MongoDB的聚合:
使用指令:db.COLLECTION_NAME.aggregate([ { $group: { _id: "$school" , numStudent: { $sum : 1 } } } ])
【说明】将school作为id,对数据集中的数据进行group分类,并将school字段相同的类别总数统计出来:
下面是一些聚合表达式:
聚合框架中常用的聚合管道:
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group:将集合中的文档分组,可用于统计结果。
$sort:将输入文档排序后输出。
$geoNear:输出接近某一地理位置的有序文档。
MongoDB数据备份:
在Ubuntu系统上使用命令: mongodump -h hostname -d dbname -o dbdir
-h : MongoDB所在的服务器地址,例如: 127.0.0.1 , 指定端口号为127.0.0.1:27017
-d :需要备份的数据库的名称
-o : 数据库备份文件存储文件夹的目标路径
打开/home/mongodata/data_20160217文件夹,可以看到备份的db-mxd数据库的备份文件如下:
MongoDB数据库的恢复:
在ubuntu系统中,数据库数据恢复的指令: mongorestore -h hostname -d dbname -dirctoryperdb dbdirectory
-h :mongoDB服务器所在的位置
-d :需要回复数据的mongoDB数据库名称
-directoryperdb :备份数据所在的位置
将上面备份的数据恢复127.0.0.2:27017处的数据库db_mxd_restore:
执行上面的操作之后,我们会发现,db_mxd中的数据已经被成功恢复到了db_mxd_restore中;
MongoDB数据库的监控:
指令: mongostat
【说明】当mongoDB数据库的数据读写变得异常慢的时候,就可以在命令行使用mongostat来查看mongoDB的时间花费情况:
指令:mongotop
【说明】查看mongoDB中每个集合花费时间的统计情况:
指令:mongotop --locks
【说明】查看每个数据库的锁的使用情况:
更多查看:MongoDB 教程
使用命令: mongo
创建数据库[b]:[/b]
(创建数据库名称为:db_mxd):
使用命令: use db_mxd
[说明] use指令,如果数据库不存在,则创建数据库,如果存在,则切换到该数据库;
删除数据库:
使用命令:首先使用use切换到要删除的数据库,然后再使用 db.dropDatabase()
插入文档:
使用指令: db.COLLECTION_NAME.insert(document)
[说明] COLLECTION_NAME为数据插入的数据集的名称, 在插入之前同样需要使用use指定插入的数据库。
【注意】插入数据也可以使用db.COLLECTION_NAME.save(document),如果不指定_id,save方法和insert方法一样,如果指定了_id则会更新该_id对应的文档。
更新文档:
使用指令:
db.COLLECTION_NAME.update(
<query>,
<update>,
{
upsert : <boolean> ,
multi : <boolean> ,
writeConcern : <document>
})
【说明】query: 为update的查询条件,通过query指定需要更新的是哪个文档;
update:为需要修改的文档的修改之后的内容;
upsert:可选参数,为检测到文档不存在时是否插入新的文档,=true则插入,=false则不插入
multi:可选参数,默认false,只更新query匹配出的第一条数据,若设置为true,则会更新满足query的所有数据记录
writeConcern:可选参数,抛出异常的级别
>>>update前的数据:
>>>update之后的数据:
删除文档:
使用指令:
MongoDB的版本是version2.6之前,使用:
db.COLLECTION_NAME.remove(<query> , <justOne>)
MongoDB的版本号在2.6以后的,需要使用:
db.COLLECTION_NAME.remove(
<query> ,
{
justOne: <boolean>,
writeConcern : <document>
})
【说明】query: 可选参数,匹配需要删除的document
justOne: 可选参数,设置justOne为1或者true,表示只删除一条文档,否则删除所有可以匹配到的文档
writeConcern:抛出异常的级别
【注意】 db.COLLECTION_NAME.remove() 表示删除数据集COLLECTION_NAME中的所有文档
查询文档:
使用指令:db.COLLECTION_NAME.find()
如果想要让查询到的数据容易读,可以使用db.COLLECTION_NAME.find().pretty()
Mongo中的查询语句和SQL语言
操作 | 格式 | 范例 | SQL中的类似语句 |
---|---|---|---|
等于 | {<key>:<value>} | db.collection_name.find({"name":"Tom"}).pretty() | where name = '菜鸟教程' |
小于 | {<key>:{$lt:<value>}} | db.collection_name.find({"age":{$lt:20}}).pretty() | where age < 20 |
小于或等于 | {<key>:{$lte:<value>}} | db.":{$lte:20}}).pretty()[/code]collection_name.find({"[code]age | whereage<= 20 |
大于 | {<key>:{$gt:<value>}} | db.":{$gt:20}}).pretty()[/code]collection_name.find({"[code]age | whereage> 20 |
大于或等于 | {<key>:{$gte:<value>}} | db.":{$gte:20}}).pretty()[/code]collection_name.find({"[code]age | whereage>= 20 |
不等于 | {<key>:{$ne:<value>}} | db.":{$ne:20}}).pretty()[/code]collection_name.find({"[code]age | whereage!= 20 |
db.COLLECTION_NAME.find({ key1 : value1 , key2 : value2 , key3 : value3 , .... })
(查询name=‘MXD’,并且age=23的文档)
在Mongodb中使用OR进行查询的语句如下:
db.COLLECTION_NAME.find({ $or: [ { key1: value1 }, { key2: value2} , { key3: value3 }, ...... ] })
(查询name='Jake'或者age=23的文档内容)
在MongoDB中使用OR和AND进行联合查询:
(在age>23的文档中查询name='MXD'而且school=‘hust’的文档)
【注意】一种常用的查询办法:
【>>>说明<<<】
find()中的第一个{},表示查找所有的文档记录,第二个{}内指定返回那些数据,age:1 和school:1表示结果中需要返回的字段,find()默认必定会返回ObjectId(即_id),如果不想返_id字段,可以使用_id:0
MongoDB中的条件操作符:
使用到的条件操作符有:
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte
>>大于操作符(>): db.COLLECTION_NAME.find({ age : { $gt : 20 } })
>>大于等于操作符(>=): db.COLLECTION_NAME.find({ age : { $gte : 20 } })
>>小于操作符(<): db.COLLECTION_NAME.find({ age : { $lt : 20} })
>>小于等于操作符(<=): db.COLLECTION_NAME.find({ age : { lte : 20 } })
>>使用大于(>)和小于(<)进行查询: db.COLLECTION_NAME.find({ age : { $gt : 20 , $lt : 22 } })
MongoDB中的$type类型检测符:
$type是MongoDB中基于BSON来检测字段类型的,并返回检测到的结果。
类型 | 数字 | 备注 |
---|---|---|
Double | 1 | |
String | 2 | |
Object | 3 | |
Array | 4 | |
Binary data | 5 | |
Undefined | 6 | 已废弃。 |
Object id | 7 | |
Boolean | 8 | |
Date | 9 | |
Null | 10 | |
Regular Expression | 11 | |
JavaScript | 13 | |
Symbol | 14 | |
JavaScript (with scope) | 15 | |
32-bit integer | 16 | |
Timestamp | 17 | |
64-bit integer | 18 | |
Min key | 255 | Query with -1. |
Max key | 127 |
MongoDB查询中使用Limit()和Skip()限制符:
db.COLLECTION_NAME.find().limit(NUMBER): 在数据集中查找最多前NUMBER条数据
db.COLLECTION_NAME.find().skip(NUM) : 在数据集中跳过前NUM条数据,查询得到后面的数据
db.COLLECTION_NAME.find().limit(NUM_1).skip(NUM_2): 在数据集中,跳过前面的NUM_2条数据,最多查询获得后面NUM_1条数据
【说明】在数据集collection_people中,从第二条(跳过了前1条数据)开始,查询获得了一条数据。
MongoDB数据的排序:
使用指令:db.COLLECTION_NAME.find().sort({ KEY: 1 })
【说明】KEY表示需要排序的字段,1表示按照升序排列,-1表示按照降序排列
MongoDB使用ensureIndex创建索引:
创建指令: db.COLLECTION_NAME.ensureIndex({ KEY : 1 })
【说明】KEY为要创建为索引的字段,1是指按照升序创建,-1指按照将序创建。
ensureIndex()创建索引接收一些可选参数:
Parameter | Type | Description |
---|---|---|
background | Boolean | 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引, 即增加 "background" 可选参数。 "background" 默认值为false。 |
unique | Boolean | 建立的索引是否唯一。指定为true创建唯一索引。默认值为false. |
name | string | 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和 排序顺序生成一个索引名称。 |
dropDups | Boolean | 在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。 默认值为 false. |
sparse | Boolean | 对文档中不存在的字段数据不启用索引;这个参数需要特别注意, 如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。 默认值为false. |
expireAfterSeconds | integer | 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 |
v | index version | 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 |
weights | document | 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引 字段的得分权重。 |
default_language | string | 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语 |
language_override | string | 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖 默认的language,默认值为 language. |
设置background:true是因为,创建索引会阻塞数据库,若设置background:true则会在后台创建,而不会阻塞数据库。
MongoDB的聚合:
使用指令:db.COLLECTION_NAME.aggregate([ { $group: { _id: "$school" , numStudent: { $sum : 1 } } } ])
【说明】将school作为id,对数据集中的数据进行group分类,并将school字段相同的类别总数统计出来:
下面是一些聚合表达式:
表达式 | 描述 | 实例 |
---|---|---|
$sum | 计算总和。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) |
$avg | 计算平均值 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) |
$min | 获取集合中所有文档对应值 得最小值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) |
$max | 获取集合中所有文档对应值 得最大值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) |
$push | 在结果文档中插入值到一个 数组中。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) |
$addToSet | 在结果文档中插入值到一个 数组中, 但不创建副本。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) |
$first | 根据资源文档的排序获取 第一个文档数据。 | db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) |
$last | 根据资源文档的排序获取 最后一个文档数据 | db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]) |
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group:将集合中的文档分组,可用于统计结果。
$sort:将输入文档排序后输出。
$geoNear:输出接近某一地理位置的有序文档。
MongoDB数据备份:
在Ubuntu系统上使用命令: mongodump -h hostname -d dbname -o dbdir
-h : MongoDB所在的服务器地址,例如: 127.0.0.1 , 指定端口号为127.0.0.1:27017
-d :需要备份的数据库的名称
-o : 数据库备份文件存储文件夹的目标路径
打开/home/mongodata/data_20160217文件夹,可以看到备份的db-mxd数据库的备份文件如下:
MongoDB数据库的恢复:
在ubuntu系统中,数据库数据恢复的指令: mongorestore -h hostname -d dbname -dirctoryperdb dbdirectory
-h :mongoDB服务器所在的位置
-d :需要回复数据的mongoDB数据库名称
-directoryperdb :备份数据所在的位置
将上面备份的数据恢复127.0.0.2:27017处的数据库db_mxd_restore:
执行上面的操作之后,我们会发现,db_mxd中的数据已经被成功恢复到了db_mxd_restore中;
MongoDB数据库的监控:
指令: mongostat
【说明】当mongoDB数据库的数据读写变得异常慢的时候,就可以在命令行使用mongostat来查看mongoDB的时间花费情况:
指令:mongotop
【说明】查看mongoDB中每个集合花费时间的统计情况:
指令:mongotop --locks
【说明】查看每个数据库的锁的使用情况:
更多查看:MongoDB 教程
相关文章推荐
- 初窥scrapy
- MongoDB 安装
- mongodb insert()和save()的相同点和区别
- express引入mongodb
- MongoDB 语法和mysql语法对比学习
- MongoDB count()的正确用法
- MongoDB中的null 和not null
- mongodb
- mongodb的应用场景
- mongodb 关系、引用、覆盖索引查询
- Mongodb Wiredtiger存储引擎实现原理
- Mongodb aggregate timezone 问题
- MongoDB安装配置快速指南
- Spring整合MongoDB
- mongodb安装及遇到的问题
- mongodb php
- springMVC集成mongoDB的demo
- SpringMVC整合MongoDB开发 高级操作
- MongoDB一般安装
- mongodb shell警告