mongo
前言
最近在学习nest,采用mongo数据库,整理了以下的快查手册。
进入
- mongo 进入mongo命令
- help 帮助
- exit 退出
- mongo 数据库名 快速进入数据库
- 备份
-
- mkdir dbbak 创建
- mongodump -d 数据库名 备份
-
- mongorestore --drop 恢复(注意在备份的文件内)
- mongodump --help 帮助
查
- show dbs 查看数据库
- show collections 查看集合
- db.stats() 查看当前数据库信息
- db.集合名.count() 查看集合有多少数据
-
- 集合名可以是数组 db[ 集合1,集合2 ].yyy()
- db.集合名.find() 查看集合 ( ) ps:( { } )对象内标识取文档的格式
$gte >= $gt > $lte <= $lt < $eq = $ne !=
$in过滤 $exists过滤是否有xxx key的
- db.集合名.find({rank:{$gte:4} }) //取出rank值>=4的
- db.集合名.find({tit:/u/ , rank:{$gte:2}}) //条件可多个
- db.集合名.find({tit:/u/}) //取出tit中带有u的 ( /u/正则表达式 )
- db.集合名.find({$or:[{tit:/u/},{rank:{$gte:1}}]})//tit带u或rank>=1
- db.集合名.find({rank:{$in:[3,4]}}) //rank是3和4的
- db.集合名.find({show:{$exists:true}}) //拿到有show属性key(mongo支持不对称的表头key)
- db.集合名.find({},{tit:true,rank:1})//拿到指定的字段tit,rank.true和1是一样的
- db.集合名.find({},{tit:true,rank:1,_id:0}) //不想要id _id:0
- db.集合名.distinct( 'xxx ' ) 排序 取出唯一的值(查看有几种分类)
- db.集合名.find( 'xxx ' ).sort( { xx : 1 } ) 在查询出来后的结果按照升序(1)排列,降序(-1)
- db.集合名.find( 'xxx ' ).limit( x ) 在查询结果默认顺序取出前x个,与sort搭配
-
db.posts.find({tit:{$exists:1},rank:{$exists:1}},{tit:1,rank:1}).sort({rank:1}).limit(3)
- db.集合名.findOne( 'xxx ' ) 默认顺序的第一条 等同于.limit( 1 )
-
db.posts.findOne({tit:{$exists:1},rank:{$exists:1},rank:{$eq:3}},{tit:1,rank:1})
- db.集合名.find( 'xxx ' ).skip( x ) 在查询结果默认顺序跳过x个 与limit配合分页
-
db.posts.find({tit:{$exists:1},rank:{$exists:1}}).skip(2).limit(2) skip-1页码limit页多少个
- db.集合.getIndexes() 查看索引
添
- use 数据库名 进入数据库,没有会创建(刚刚创建完成由于内部没有集合会看不到)
- db.createCollection('集合名') 创建集合(当集合创建后 dbs就可看到数据库了)
- db.集合名.insert( { } ) 在集合中插入对象
- db.集合名.update({ },{ $set:{ }},{ }) 有则修改 无则添加
- db.集合名.update( { } , { },{ upsert:true }) 有则更新 无则添加 注意: 第一个{}(假的即可)需要给,为空则修改第一条
- db.集合名.createIndex({rank:1}) 创建rank的升序索引
-
- db.posts.createIndex({rank:1},{unique:true}) 代表唯一
删
- db.dropDatabase() 删除当前数据库
- db.集合名.drop() 删除集合
- db.集合名.remove( { } ) 删除数据 {}不规定是全部删除,可{tit:'123'}(删除tit是123的数据)
- db.集合名.update({tit:'demo'},{ $unset:{rank:1}}) 删除文档字段
- db.集合名.dropIndex({rank:1}) 删除rank的升序索引
改
- db.集合名.renameCollection('要改的集合名') //修改集合名
- db.集合名.update( { 过滤 } , { 修改内容 } , { 操作 }) //修改操作文档
$xxx 函数 $set 严格指定tit字段,没有则添加
$inc 递增 $mul 相乘 $rename 改名 $unset 删除字段
upsert 操作项目(有则改无则加)
- db.posts.update({rank:1},{$set:{tit:'11111111'}}) //$set 严格指定tit字段
- 不加 $set 为替换,危险操作!!! 上方如不加$set则代表将整条数据替换为只有tit:'11111111'
- 如果没有对应字段 则为添加
- db.posts.update({type:'it'},{$set:{tit:'typeititititititit'}}) // 注意非字面意思 不会更新所有type是it的 只会更新第一条
- db.posts.update({type:'it'},{$set:{tit:'typeititititititit'}},{multi:true}) //multi:true多条更新
- db.posts.update({rank:2},{$inc:{rank:100}}) //在rank等于2数据rank字段加100
- db.posts.update({tit:'demo'},{$mul:{rank:2}})
- db.posts.update({show:true},{$rename:{show:'isShow'}})
- db.posts.update({tit:'demo'},{$unset:{rank:true}}) //true可用1替代
- db.posts.update({tit:'2222222222'},{rank:222,type:'game'},{upsert:1})
//上方代表看看 有没有tit为2222222的,有就改成中间{}这样,无就添加中间{}
//第一个{}(假的即可)需要给,为空则修改第一条
//注意: 中间{} 是替换上去,不会自动合并字段
注
- mongo采用js语法,用js思维理解
- db 开头后面是函数 记得()执行
- db.xxx 可以直接.xxx进行引用 (json对象)
- find( { '' , '' }, { } ) 查询时 ( )内 , 左侧{}筛选 ( )内 , 右侧{}文档操作
- 查询采用js对象思维, 条件可自由组合