1.查看当前数据库:show dbsmysql
2.选择数据库:use databaseName正则表达式
3.查看当前库的集合:show tables/collectionssql
4.建立数据库:use databaseNamemongodb
5.建立集合:
db.createCollection('collectionName')
db.collectionName.insert({})数据库
6.删除集合:db.collectionName.drop()json
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},是否只删一行, 默认为falsethis
注意:
例1: 删除stu表中 sn属性值为’001’的文档
db.stu.remove({sn:’001’});
例2: 删除stu表中gender属性为m的文档,只删除1行 db.stu.remove({gender:’m’,true});
11.修改文档:db.collectionName.update(查询表达式,新值,选项)
(1) db.news.update({name:'QQ'},{name:'MSN'});
结果: 文档中的其余列也不见了,改后只有_id和name列了,新文档直接替换了旧文档,而不是修改
(2) 若是是想修改文档的某列,能够用$set关键字 db.collectionName.update(query,{$set:{name:’QQ’}})
修改时的赋值表达式:
例: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---是指没有匹配的行,则直接插入该行 例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});
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时的备份目录)