MongoDB

启动 :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

`

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容