您的位置:首页 > 数据库 > Mongodb

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语言

操作格式范例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.
collection_name
.find({"[code]age
":{$lte:20}}).pretty()[/code]
where 
age
<= 20
大于
{<key>:{$gt:<value>}}
db.
collection_name
.find({"[code]age
":{$gt:20}}).pretty()[/code]
where 
age
> 20
大于或等于
{<key>:{$gte:<value>}}
db.
collection_name
.find({"[code]age
":{$gte:20}}).pretty()[/code]
where 
age
>= 20
不等于
{<key>:{$ne:<value>}}
db.
collection_name
.find({"[code]age
":{$ne:20}}).pretty()[/code]
where 
age
!= 20
在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来检测字段类型的,并返回检测到的结果。

类型数字备注
Double1
String2
Object3
Array4
Binary data5
Undefined6已废弃。
Object id7
Boolean8
Date9
Null10
Regular Expression11
JavaScript13
Symbol14
JavaScript (with scope)15
32-bit integer16
Timestamp17
64-bit integer18
Min key255Query with -1.
Max key127
在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()创建索引接收一些可选参数:

ParameterTypeDescription
backgroundBoolean建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,

即增加 "background" 可选参数。 "background" 默认值为false
uniqueBoolean建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
namestring索引的名称。如果未指定,MongoDB的通过连接索引的字段名和

排序顺序生成一个索引名称。
dropDupsBoolean在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。

默认值为 false.
sparseBoolean对文档中不存在的字段数据不启用索引;这个参数需要特别注意,

如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。

默认值为false.
expireAfterSecondsinteger指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
vindex version索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weightsdocument索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引

字段的得分权重。
default_languagestring对于文本索引,该参数决定了停用词及词干和词器的规则的列表。

默认为英语
language_overridestring对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖

默认的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 教程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: