设为首页 收藏本站
查看: 922|回复: 0

[经验分享] MongoDb基础命令

[复制链接]

尚未签到

发表于 2018-10-25 11:41:56 | 显示全部楼层 |阅读模式
  一些基础忘记随时查看。。
  #整备恢复
  mongodump --port 20001 --authenticationDatabase=admin -u *  -d lvlv -c lvlv -o /home
  mongorestore --drop  --host 172.16.201.74  --port 20001 --authenticationDatabase=admin -umgbackup -d test /tmp/liding/test/liding.bson
  #基于时间备份oplog
  mongodump --port 20001  --authenticationDatabase=admin -u* -d local -c oplog.rs -q 'ts:{$lt:Timestamp(1462830369,1),$gt: Timestamp(1462821613, 1)}}' -o /tmp/lidddd
  #将oplog恢复到临时库
  mongorestore -u* --authenticationDatabase=admin --host 172.16.201.73 --port 27017 -d local -c oplog.rs  /data/backup/oplog1/local/oplog.rs.bson
  #从临时库重放oplog
  mongooplog --port 20001 -u* --authenticationDatabase=admin --from=172.16.201.73:27017
  oplog查找
  db.oplog.rs.find({ts:{$lt:Timestamp(1462917498, 1),$gt:Timestamp(1462918425, 1)}}).pretty()
  use local
  db.oplog.rs.find()
  date -d @1361542596 +"%Y-%m-%d %H:%M:%S"
  for (var i=0;iuse Admin         (切换到创建用户)
  ->db.TestDb          (创建数据库)
  ->db.addUser(“userName”,”Pwd”)    创建用户
  ->db.auth(“userName”,”Pwd”)       设置用户为允许连接的用户
  ->db.createCollection(“TableName”)                                     创建表
  ->showcollections                          查看表是否创建成功
  ->db.TableName.Save({age:1})                 添加数据
  ->db.TableName.find()                        查看添加的数据是否成功(如果没有查询到任何的结果,说明添加失败)
  创建数据库
  语法
  MongoDB 创建数据库的语法格式如下:
  use DATABASE_NAME
  注:该命令只是在内存中临时创建数据库,创建后如果没有写入操作退出后会在内存中释放
  删除数据库
  语法
  MongoDB 删除数据库的语法格式如下:
  db.dropDatabase()
  注:删除库之前一定要先use database
  插入文档
  MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:
  db.COLLECTION_NAME.insert({document})
  MongoDB 更新文档
  MongoDB 使用 update() 和 save() 方法来更新集合中的文档。接下来让我们详细来看下两个函数的应用及其区别。
  update() 方法
  update() 方法用于更新已存在的文档。语法格式如下:
  db.collection.update( , , { upsert: , multi: , writeConcern:  } )
  参数说明:
  query : update的查询条件,类似sql update查询内where后面的。
  update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
  upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  writeConcern :可选,抛出异常的级别。
  save() 方法
  save() 方法通过传入的文档来替换已有文档。语法格式如下:
  db.collection.save( , { writeConcern:  } )
  MongoDB 删除文档
  MongoDB remove()函数是用来移除集合中的数据。
  在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。
  语法
  remove() 方法的基本语法格式如下所示:
  db.collection.remove( , { justOne: , writeConcern:  } )
  参数说明:
  query :(可选)删除的文档的条件。
  justOne : (可选)如果设为 true 或 1,则只删除一个文档。
  writeConcern :(可选)抛出异常的级别。
  查询文档
  语法
  MongoDB 查询数据的语法格式如下:
  >db.COLLECTION_NAME.find()
  find() 方法以非结构化的方式来显示所有文档。
  如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
  >db.col.find().pretty()
  MongoDB 与 RDBMS Where 语句比较
  如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
  等于{:}db.col.find({"by":"xywydba"}).pretty()where by = 'xywydba'
  小于{:{$lt:}}db.col.find({"likes":{$lt:50}}).pretty()where likes < 50
  小于或等于{:{$lte:}}db.col.find({"likes":{$lte:50}}).pretty()where likes  50
  大于或等于{:{$gte:}}db.col.find({"likes":{$gte:50}}).pretty()where likes >= 50
  不等于{:{$ne:}}db.col.find({"likes":{$ne:50}}).pretty()where likes != 50
  操作
  格式
  范例
  RDBMS中的类似语句
  MongoDB AND 条件
  MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,及常规 SQL 的 AND 条件。
  语法格式如下:
  >db.col.find({key1:value1, key2:value2}).pretty()
  MongoDB OR 条件
  MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
  >db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()
  MongoDB Limit与Skip方法
  MongoDB Limit() 方法
  如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
  语法
  limit()方法基本语法如下所示:
  >db.COLLECTION_NAME.find().limit(NUMBER)
  MongoDB Skip() 方法
  我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
  语法
  skip() 方法脚本语法格式如下:
  >db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
  MongoDB 排序
  MongoDB sort()方法
  在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
  语法
  sort()方法基本语法如下所示:
  >db.COLLECTION_NAME.find().sort({KEY:1})
  MongoDB 聚合
  MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
  aggregate() 方法
  MongoDB中聚合的方法使用aggregate()。
  语法
  aggregate() 方法的基本语法格式如下所示:
  >db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
  下表展示了一些聚合的表达式:
  表达式
  描述
  实例
  $sum计算总和。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
  $avg计算平均值db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
  $min获取集合中所有文档对应值得最小值。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
  $max获取集合中所有文档对应值得最大值。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
  $push在结果文档中插入值到一个数组中。db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
  $addToSet在结果文档中插入值到一个数组中,但不创建副本。db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
  $first根据资源文档的排序获取第一个文档数据。db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
  $last根据资源文档的排序获取最后一个文档数据db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])
  管道的概念
  管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
  MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
  表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
  这里我们介绍一下聚合框架中常用的几个操作:
  $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
  $limit:用来限制MongoDB聚合管道返回的文档数。
  $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  $group:将集合中的文档分组,可用于统计结果。
  $sort:将输入文档排序后输出。
  $geoNear:输出接近某一地理位置的有序文档。
  管道操作符实例
  1.$project实例

  db.article.aggregate( { $project : {>  2.$match实例
  db.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] );
  3.$skip实例
  db.article.aggregate( { $skip : 5 });
  mongoDB常用命令
  1、与Mql对照
  MySQL
  MongoDB
  说明
  mysqld
  mongod
  服务器守护进程
  mysql
  mongo
  客户端工具
  mysqldump
  mongodump
  逻辑备份工具
  mysql
  mongorestore
  逻辑恢复工具
  db.repairDatabase()
  修复数据库
  mysqldump
  mongoexport
  数据导出工具
  source
  mongoimport
  数据导入工具
  grant * privileges on *.* to …
  Db.addUser()
  Db.auth()
  新建用户并权限
  show databases
  show dbs
  显示库列表
  Show tables
  Show collections
  显示表列表
  Show slave status
  Rs.status
  查询主从状态
  Create table users(a int, b int)
  db.createCollection("mycoll", {capped:true,
  size:100000}) 另:可隐式创建表。
  创建表

  Create INDEX>  db.users.ensureIndex({name:1})
  创建索引

  Create INDEX>  db.users.ensureIndex({name:1,ts:-1})
  创建索引
  Insert into users values(1, 1)
  db.users.insert({a:1, b:1})
  插入记录
  Select a, b from users
  db.users.find({},{a:1, b:1})
  查询表
  Select * from users
  db.users.find()
  查询表
  Select * from users where age=33
  db.users.find({age:33})
  条件查询
  Select a, b from users where age=33
  db.users.find({age:33},{a:1, b:1})
  条件查询
  select * from users where age33 and age30
  db.users.find({age: {'$gt': 30}}).count()
  获取表记录数
  select DISTINCT last_name from users
  db.users.distinct('last_name')
  去掉重复值
  select * from users ORDER BY name
  db.users.find().sort({name:-1})
  排序
  select * from users ORDER BY name DESC
  db.users.find().sort({name:-1})
  排序
  EXPLAIN select * from users where z=3
  db.users.find({z:3}).explain()
  获取存储路径
  update users set a=1 where b='q'
  db.users.update({b:'q'}, {$set:{a:1}}, false, true)
  更新记录
  update users set a=a+2 where b='q'
  db.users.update({b:'q'}, {$inc:{a:2}}, false, true)
  更新记录
  delete from users where z="abc"
  db.users.remove({z:'abc'})
  删除记录
  db. users.remove()
  删除所有的记录
  drop database IF EXISTS test;
  use test
  db.dropDatabase()
  删除数据库
  drop table IF EXISTS test;
  db.mytable.drop()
  删除表/collection
  db.addUser(‘test’, ’test’)
  添加用户
  readOnly-->false
  db.addUser(‘test’, ’test’, true)
  添加用户
  readOnly-->true
  db.addUser("test","test222")
  更改密码
  db.system.users.remove({user:"test"})
  或者db.removeUser('test')
  删除用户
  db.system.users.find()
  查看用户列表
  show users
  查看当前库所有用户
  db.printCollectionStats()
  查看各collection的状态
  db.printReplicationInfo()
  查看主从复制状态
  show profile
  查看profiling
  db.copyDatabase('mail_addr','mail_addr_tmp')
  拷贝数据库
  db.users.dataSize()
  查看collection数据的大小
  db. users.totalIndexSize()
  查询索引的大小


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626314-1-1.html 上篇帖子: centOS 6 安装mongoDB 下篇帖子: 解决线上135因mongodb太大容量,导致硬盘空间不足的方法【内部问题解决】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表