MongoDB常用命令

1.查看当前数据库:show dbs

2.选择数据库:use databaseName

3.查看当前库的集合:show tables/collections

4.创建数据库:use databaseName

5.创建集合:db.createCollection('collectionName')/db.collectionName.insert({})

6.删除集合:db.collectionName.drop()

7.删除数据库:db.dropDatabase()

8.查询命令:db.help

9.新增文档:
db.collectionName.insert({"name":"zhangsan"})

db.collectionName.insert({"_id":1,"name": "lisi"})

10.删除文档:db.collectionName.remove(查询表达式, 选项);
选项是指 {justOne:true/false},是否只删一行, 默认为false
注意
1: 查询表达式依然是个json对象
2: 查询表达式匹配的行,将被删掉.
3: 如果不写查询表达式,collections中的所有文档将被删掉.

例1: db.stu.remove({sn:’001’});
删除stu表中 sn属性值为’001’的文档

例2: db.stu.remove({gender:’m’,true});
删除stu表中gender属性为m的文档,只删除1行.

11.修改文档:db.collectionName.update(查询表达式,新值,选项);
(1) db.news.update({name:'QQ'},{name:'MSN'});
是指选中news表中,name值为QQ的文档,并把其文档值改为{name:’MSN’},
结果: 文档中的其他列也不见了,改后只有_id和name列了.
即--新文档直接替换了旧文档,而不是修改

(2) 如果是想修改文档的某列,可以用$set关键字
db.collectionName.update(query,{$set:{name:’QQ’}})
修改时的赋值表达式:
$set:修改某列的值
$unset 删除某个列
$rename 重命名某个列
$inc 增长某个列
$setOnInsert 当upsert为true时,并且发生了insert操作时,可以补充的字段,相当于mysql中的列的默认值
例:db.user.update({name:'lisi'},{$set:{area:'chaoyang'},$unset:{height:1},$inc:{age:1},$rename:{sex:'gender'}});

(3) Option的作用:{upsert:true/false,multi:true/false}
Upsert---是指没有匹配的行,则直接插入该行.(和mysql中的replace一样)
例1:db.stu.update({name:'wuyong'},{$set:{name:'junshiwuyong'}},{upsert:true});
如果有name=’wuyong’的文档,将被修改
如果没有,将添加此新文档

例2:db.news.update({_id:99},{x:123,y:234},{upsert:true});
没有_id=99的文档被修改,因此直接插入该文档

(4) multi: 是指修改多行(即使查询表达式命中多行,默认也只改1行,如果想改多行,可以用此选项)
db.news.update({age:21},{$set:{age:22}},{multi:true});
则把news中所有age=21的文档,都修改

12.查询文档:db.collectionName.find(查询表达式,查询的列)
例1:db.stu.find()
查询所有文档 所有内容

例2: db.stu.find({},{gendre:1})
查询所有文档,的gender属性 (_id属性默认总是查出来)

例3: db.stu.find({},{gender:1, _id:0})
查询所有文档的gender属性,且不查询_id属性

例4: db.stu.find({gender:’male’},{name:1,_id:0});
查询所有gender属性值为male的文档中的name属性

13.查询表达式:
(1): 最简单的查询表达式
语法: {filed:value}
作用:是指查询field列的值为value的文档

(2): $ne
语法: {field:{$nq:value}}
作用:查filed列的值 不等于 value 的文档

(3): $nin
语法: {field:{$nin:value}}
作用:查filed列的值 不在 value数组的文档

(4): $all
语法: {field:{$all:[v1,v2..]}}
作用:是指取出 field列是一个数组,且至少包含 v1,v2值

(5): $exists
语法: {field:{$exists:1}}
作用: 查询出含有field字段的文档

(6): $nor
语法: {field:{$nor,[条件1,条件2]}}
作用:是指 所有条件都不满足的文档为真返回

(7):用正则表达式查询 以”诺基亚”开头的商品
语法: db.goods.find({goods_name:/诺基亚.*/},{goods_name:1});

(8): 用$where表达式来查询
语法: db.goods.find({$where:'this.cat_id != 3 && this.cat_id != 11'});

(9): $eq
语法:{field: {$eq,value}}
作用:是指满足field值等于value的文档返回

(10): $gt
语法:{field: {$gt,value}}
作用:是指满足field值大于value的文档返回

(11): $gte
语法:{field: {$gte,value}}
作用:是指满足field值大于等于value的文档返回

(12): $lt
语法:{field: {$lt,value}}
作用:是指满足field值小于value的文档返回

(13): $lte
语法:{field: {$lte,value}}
作用:是指满足field值小于等于value的文档返回

14.查看语句的执行计划
db.collectionName.find({"name":"123"}).explain();

15.索引
(1) 查看当前索引状态: db.collectionName.getIndexes();

(2) 创建普通的单列索引:db.collectionName.ensureIndex({field:1/-1}); 1是升续 -1是降续

(3) 删除单个索引:db.collectionName.dropIndex({filed:1/-1});

(4) 一下删除所有索引:db.collectionName.dropIndexes();

(5) 创建多列索引 :db.collectionName.ensureIndex({field1:1/-1, field2:1/-1});

(6) 创建子文档索引:db.collectionName.ensureIndex({filed.subfield:1/-1});

(7) 创建唯一索引:db.collectionName.ensureIndex({filed.subfield:1/-1}, {unique:true});

(8) 创建稀疏索引:如果针对field做索引,针对不含field列的文档,将不建立索引.
与之相对,普通索引,会把该文档的field列的值认为NULL,并建索引.

根据{email:null}来查询, 建普通索引能查到,而建稀疏索引查不到数据.

(9) 创建哈希索引(2.4新增的):哈希索引速度比普通索引快,但是,无能对范围查询进行优化.适宜于---随机性强的散列
db.collectionName.ensureIndex({file:’hashed’});

(10) 重建索引一个表经过很多次修改后,导致表的文件产生空洞,索引文件也如此.
可以通过索引的重建,减少索引文件碎片,并提高索引的效率.
db.collectionName.reIndex()

16.用户
(A) 在mongodb中,有一个admin数据库, 牵涉到服务器配置层面的操作,需要先切换到admin数据.
即 use admin ,相当于进入超级用户管理模式.

(B) mongo的用户是以数据库为单位来建立的, 每个数据库有自己的管理员.

(C) 我们在设置用户时,需要先在admin数据库下建立管理员,这个管理员登陆后,相当于超级管理员.

(1) 添加用户:db.addUser(用户名,密码,是否只读)

use admin
db.addUser(‘sa’,’sa’,false);

(2) 认证

use test
db.auth(用户名,密码);

(3) 修改用户密码

use test
db.changeUserPassword(用户名, 新密码);

(4) 删除用户

use test
db.removeUser(用户名);

(5) 注意: 如果需要给用户添加更多的权限,可以用json结构来传递用户角色参数
例:

use test
db.addUser({user:'guan',pwd:'111111',roles:['readWrite,dbAdmin']});

(6) 注意: 添加用户后,我们再次退出并登陆,发现依然可以直接读数据库
原因: mongodb服务器启动时, 默认不是需要认证的.
要让用户生效, 需要启动服务器时,就指定 --auth 选项.
这样, 操作时,就需要认证了.

17.导入与导出:
(1) 可以操作的是本地的mongodb服务器,也可以是远程的,所以都有如下通用选项:
-h host 主机
--port port 端口
-u username 用户名
-p passwd 密码

(2) mongoexport 导出json格式的文件
-d 库名
-c 表名
-f field1,field2...列名
-q 查询条件
-o 导出的文件名
-- csv 导出csv格式(便于和传统数据库交换数据)

例1:导出news整张表到test.json文件中
./bin/mongoexport -d test -c news -o test.json

例2: 只导出goods_id,goods_name列
./bin/mongoexport -d test -c goods -f goods_id,goods_name -o goods.json

例3: 只导出价格低于1000元的行
./bin/mongoexport -d test -c goods -f goods_id,goods_name,shop_price -q ‘{shop_price:{$lt:200}}’ -o goods.json

(3) 导入
-d 待导入的数据库
-c 待导入的表(不存在会自己创建)
--type csv/json(默认)
--file 备份文件路径

例1: 导入json
./bin/mongoimport -d test -c goods --file ./goodsall.json

例2: 导入csv
./bin/mongoimport -d test -c goods --type csv -f goods_id,goods_name --file ./goodsall.csv

./bin/mongoimport -d test -c goods --type csv --headline -f goods_id,goods_name --file ./goodsall.csv

(4) 导出二进制bson结构的数据及其索引信息
-d 库名
-c 表名
-f field1,field2...列名

例1:
mongodum -d test [-c 表名] 默认是导出到mongo下的dump目录

规律:
1:导出的文件放在以database命名的目录下
2: 每个表导出2个文件,分别是bson结构的数据文件, json的索引信息
3: 如果不声明表名, 导出所有的表

(5) 导入二进制文件
例1:./bin/mongorestore -d test --directoryperdb dump/test/ (mongodump时的备份目录)

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