MongoDB

2018-12-30  本文已影响0人  zy小太阳

启动 :sudo service mongod |mongodb start
停止 :sudo service mongod |mongodb stop
重启 :sudo service mongod |mongodb restart

设置配置文件

mongod.conf
可以设置数据的存储路径 | 设置log日志的存储路径 | 设置端口号
设置IP | 开启权限

启动mongo客户端 : mongo

net start mongo : windows

关于数据库的基本命令

查看当前数据库 : db

查看所有数据库 :show dbs

创建集合 :

db.createCollection(name, options) 要切换到数据库下才能创建集合
(name是要创建的集合的名称,options是一个文档)

eg:非固定大小的集合 : db.createCollection('info')
固定大小的集合 : db.createCollection('info', {capped:True,
size:10, (指定集合的大小)(优先级更高)
(集合存满时,新数据会覆盖之前的数据) max: (可选)指定固定集合中包含文档的最大数量})

删除数据库 :db.dropDatabase() (切换到数据库才能删除)

使用数据库 :use dbname

查看当前数据库信息 :db.stats

查看集合 :show collections

删除集合 :db.集合名称.drop()

增删改查

插入文档

(插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectId,是主键,也是索引)
db.集合名称.insert(document)

单条插入:

db.stu.insert(
    {
        _id:'20201226',
        name:'xxxx',gender:1
    }
        )

多条插入:

db.stu.insert(
    [
        {name:'王明',gender:1},
        {name:'王玲玲',gender:0}
    ]
)

更新数据

全文档更新(一个新文档替换之前的文档,ID不变)

db.集合名称.update(
{name:'zhangsan'}, 查询条件
{name:'lisi',class:'1712B'} 新的文档
{ upsert : 默认情况下为false,要更新的文档不存在,不会插入一条新的数据,
multi : 默认为false, 只更新查找到的第一条,为True表示更新所有
}
)

局部更新

db.stu.update(
{name:'zhangsan'}, 查找条件
{
$set:{name:'lisi'} { upsert : 默认情况下为false,要更新的文档不存在,不会插入一条新的数据,
multi : 默认为false, 只更新查找到的第一条,为True表示更新所有
}
}
)

更新多条

db.stu.update(
{name:'李自成'},
{
$set:{gender:0}
},
{multi:true}
)

save()会根据_id进行查找,如果文档的_id已经存在则修改,如果文档的_id不存在则添加

eg: db.集合名称.save(
{
_id:'20180820101010',
'name':'zhangsan'
}
)

格式化输出

db.集合名称.find().pretty()

删除数据库

db.dropDatabase(数据库名)

删除数据(多条)

db.集合名称.remove(
{'key':'value'} 条件
)

删除单条

db.集合名称.remove(
{'key':'value'}, 条件
1 (不表示数量,表示的是True(False))
)

列出集合内所有信息

db.集合名称.find()

查询全部

db.集合名称.find(
{age:20,gender:1}
)

查询一条

db.集合名称.findOne(
{age:20,gender:1}
)

比较运算符

等于
小于 lt 小于等于lte
大于 gt 大于等于gte
不等于 $ne

eg: db.集合.find(
{'time':{$gt:100},
{'actor':'李连杰'}
} )

逻辑或 $or

db.集合.find(
{
or:[ {time:{gt:100}},
{actor:'李连杰'}
]
} )

逻辑或$or和and一起使用

db.集合.find(
{
or:[ {age:{gte:18}},
{gender:1}
],
name:'gj'
}
)

范围运算符

$in:在..范围 $nin:不在...范围

db.movie.find(
{
times:{$in:[100,120]}
}
)

使用正则查询

db.集合名称.find(
{
'key':/^正则表达式/
}
)

db.集合名称.find(
{
'key':{$regex:'正则表达式'}
}
)

$type:只返回符合数据类型的文档

db.集合名称.find(
{
'key':{$type:'数据类型'}
}
)

limit:限制返回

skip:跳过指点的条数

db.集合名称.find().limit(num).skip(num)
注意:limit和skip先后顺序不影响结果

sort:进行排序 1:升序 -1:降序

db.集合名称.find().sort({'key':方向(1 or -1),'key2':方向(1 or -1)})

distinct:实现去重

db.集合名称.distinct(
'去重字段',
{'条件'}
)

project(投影):可以选择查询结果中,数据的展示和隐藏

0表示隐藏,1显示

db.集合名称.find(
{'条件'},
{'key':1}
)

假如再设置要显示的字段时,第一个字段设置为1,只展示这一个其他都不展示,反之,只隐藏当前设置的字段,其他的字段都会展示粗来

count:统计文档的个数

db.集合名称.count(
{条件}
)

db.集合名称.find({条件}).count()

mongodb中的聚合操作,主要是处理数据(求和,平均值),

将处理后的数据返回

"""
$group:将集合中的文档分组,可用于统计结果。

$project:修改输入文档的结构。可以用来重命名、增加或
删除域,也可以用于创建计算结果以及嵌套文档。

match:用于过滤数据,只输出符合条件的文档。match使
用MongoDB的标准查询操作。

$limit:用来限制MongoDB聚合管道返回的文档数。

$skip:在聚合管道中跳过指定数量的文档,并返回余下的文
档。

$unwind:将文档中的某一个数组类型字段拆分成多条,每条
包含数组中的一个值。

$sort:将输入文档排序后输出。
"""

创建超级管理用户

use admin
db.createUser(

    {    user:'admin',
          pwd:'123',
        roles:[{role:'root',db:'admin'}]
    }
   )

修改普通用户权限或密码

修改用户:可以修改pwd、roles属性

注意这里只有超级管理员才有权限修改普通用户的密码和管理权限

修改用户密码(切换到有权限操作的数据库下)

db.updateUser(‘ljh',{pwd:'456'})

添加用户权限(切换到有权限操作的数据库下)
db.grantRolesToUser('username',[{role:'',db:''}])

移除用户权限(切换到有权限操作的数据库下)
db.revokeRolesFromUser('username',[{role:'',db:''}])

删除用户(方式一)(切换到有权限操作的数据库下)
db.dropUser('username')

删除用户 (方式二)
use admin db.system.users.remove({user:'username'})

MongoDB备份

在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。

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目录,这个目录里面存放该数据库实例的备份数据。

如果没有开启权限

mongodump -h 127.0.0.1:27017 -d 数据库名称 -o ~/Desktop/数据库备份的路径

mongodump -h 127.0.0.1:27017 -o ~/Desktop/数据库备份的路径

如果开启了权限设置(使用超级管理员权限)我们也可以使用账号密码的方式备份指定用户的数据库

mongodump -u username -p password --authenticationDatabase 'admin' -d dbname -o dbpath

恢复备份

mongodb使用 mongorestore 命令来恢复备份的数据。

mongorestore -h hostname:port -d dbname --dir path

-h (host): MongoDB所在服务器地址,默认为: localhost:27017

-d (db): 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

--dir: 指定备份的目录

如果没有开启权限

mongorestore -h 127.0.0.1:27017 -d 数据库名称 --dir 数据库备份文件路径

mongorestore -h 127.0.0.1 -dir 数据库备份文件路径

下面是添加了管理员权限之后的备份命令

如果开启了权限设置(使用超级管理员权限)

mongorestore -u username -p password --authenticationDatabase 'admin' -d 数据库名称 --dir 数据库备份文件路径

MongoDB数据导入与导出
导出工具:mongoexport

mongoexport -d dbname -c collectionname -o file --type json/csv -f field

参数说明:

d :数据库名
c :collection名
o :输出的文件名
-type : 输出的格式,默认为json
f :输出的字段,如果-type为csv,则需要加上-f "字段名"

示例:

导出json

mongoexport -d class1804 -c books -o ~/桌面/dump/books.json --type json

导出csv

mongoexport -d class1804 -c books -o ~/桌面/dump/books.csv --type csv -f 'by_user,likes'

数据导入:mongoimport

mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv

参数说明:

d:数据库名
c:collection名
-type:导入的格式默认json
f:导入的字段名
-headerline:如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
-file:要导入的文件

示例:

导入json

mongoimport -d class1712B -c books --file ~/桌面/dump/books --type json

导入csv

mongoimport -d class1712B -c info --file ~/桌面/dump/books --headerline --type csv

`

上一篇下一篇

猜你喜欢

热点阅读