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

[经验分享] mongo实践-通过js shell操作mongo

[复制链接]

尚未签到

发表于 2016-12-2 07:32:31 | 显示全部楼层 |阅读模式
  保存命令:
  j={name:"wangjingjing",age:15}
  db.user.save(j);
  查询命令:
  var cursor = db.user.find();
  while(cursor.hasNext())printJson(cursor.next());
  printJson(cursor[4]);
  var arr = cursor.toArray();
  db.user.find({name:"wangjingjing"});
  //select age from user where name='wangjingjing'
  db.user.find({name:"wangjingjing"},{age:true});
  db.user.findOne();
  db.user.find().limit(3);
  修改命令:
  db.user.update({name:"wangjingjing"},{$set:{name:"jingjing"}});
  db.user.update({name:"wangjingjing"},{$inc:{age:10}}); //给age增加10
  db.user.update({name:"wangjingjing"},{$push:{habit:["basketball","football"]}});
  删除命令:
  db.user.remove({name:"jingjing"})
  高级查询命令:
  db.user.find({x:{$gt:3}}); x>3
  db.user.find({x:{$lt:3}}); x<3
  db.user.find({x:{$gte:3}}); x>=3
  db.user.find({x:{$lte:3}}); x<=3
  db.user.find({x:{$lte:3,$gte:2}}); 2<=x<=3
  var x = {x:[3,4,5]}
  db.user.save(x);
  db.user.find({x:{$all:[3,4]}}) 匹配
  db.user.find({x:{$all:[3,4,6]}}) 不匹配
  db.user.find({x:{$in:[3,4,6]}}) 匹配
  db.user.find({x:{$nin:[3,4,6]}}) 匹配
  db.user.find({x:{$exsits:true}}) 匹配有包含x的属性
  db.user.find({x:{$mod:[6,1]}}) 取模6等于1
  db.user.find({x:{$ne:1}}) x!=1
  db.user.find({$or:[{name:"jing"],[age:10]}) 或操作
  db.user.find({x:{$size:3}}) 数组x的元素个数为3
  db.user.find().skip(1).limit(1).count(true); 第二个记录
  db.user.find().sort({age:1});升序
  db.user.find().sort({age:-1});降序
  导出文件
  mongoexport -d user -c user -o user.bat 
  导入文件
  mongoimport -d user -c user user.bat
  备份文件
  mongodump -d user -o my_user_dump
  恢复文件
  mongorestore -d user my_user_dump\user\
  安全访问
  mongod --bind_ip 192.168.1.103 --port 28018
  mongo 192.168.1.103:28018
  建立索引
  db.user.ensureIndex({age:1},{background:true}); 升序
  db.user.getIndexes();
  解释执行
  db.user.find().explain()
  复制集
  Replica Set使用指南(在单机上配置)
  简介:
  一个Replica-Set是在一组N个mongod服务一起协作来进行后援支持。
  搭建一个replica-set需要两个步骤:在每个节点上启动服务;初始化这个set。
  标准模式下,1个set包含3个节点。我们现在就在同一个服务器上搭建一个。
  一旦mongod服务节点都启动了,我们需要一个指令来初始化这个set。几秒钟之后,三个节点中会选择出一个
  主控节点(master node),之后我们就可以向这个set中写入或者查询数据了。
  步骤一:
  分别为3个节点分配数据存放的位置空间
  $  mkdir -p /data/r0
  $  mkdir -p /data/r1
  $  mkdir -p /data/r2
  之后,使用 --replSet 参数启动mongod服务,这个参数需要我们指定replica-set的名称,这里我们称我们的这个set为“foo”
  $ mongod --replSet foo --port 27017 --dbpath /data/r0
  $ mongod --replSet foo --port 27018 --dbpath /data/r1
  $ mongod --replSet foo --port 27019 --dbpath /data/r2
  现在3个节点都跑起来了。这时,每个节点应该都打出如下的警告信息:
  ————————
  Mon Aug  2 11:30:19 [startReplSets] replSet can't get local.
  system.replset config from self or any seed (EMPTYCONFIG)
  ————————
  不要紧张,这是因为我们还没有初始化这个set.
  步骤二:
  我们可以从任意3个节点中的一个来运行 replSetInitiate 命令来初始化这个set.
  [kyle@arete ~$]$ mongo localhost:27017
  MongoDB shell version: 1.6.3
  connecting to: localhost:27017/test
  > config = {_id: 'foo', members: [
  {_id: 0, host: 'localhost:27017'},
  {_id: 1, host: 'localhost:27018'},
  {_id: 2, host: 'localhost:27019'}]
  }
  > rs.initiate(config);
  {
  "info" : "Config now saved locally.  Should come online in about a minute.",
  "ok" : 1
  }
  我们需要配置config这个对象,指明set的名称和这个set下的成员。然后将config传递给rs.initiate().
  如果到这里一切都顺利的话,我们会得要一个信息说:这个set会在1分钟内启动完成。在这个时间段内,有一个
  节点会被选择为主控节点(master节点)。
  如果想查看这个set的当前状态的话,使用rs.status这个命令:
  > rs.status()
  {
  "set" : "foo",
  "date" : "Mon Aug 02 2010 11:39:08 GMT-0400 (EDT)",
  "myState" : 1,
  "members" : [
  {
  "name" : "arete.local:27017",
  "self" : true,
  },
  {
  "name" : "localhost:27019",
  "health" : 1,
  "uptime" : 101,
  "lastHeartbeat" : "Mon Aug 02 2010 11:39:07 GMT-0400",
  },
  {
  "name" : "localhost:27018",
  "health" : 1,
  "uptime" : 107,
  "lastHeartbeat" : "Mon Aug 02 2010 11:39:07 GMT-0400",
  }
  ],
  "ok" : 1
  }
  这里有个值"myState",如果这个值为1,说明是主控节点(master);如果是 2 ,说明是从属节点(slave).
  在同一时刻,每组 Replica Sets 只有一个 Primary,用于接受写操作。而后会异步复制到其他成员数据库中。一旦 primary 死掉,会自动投票选出接任的 primary 来,原服务器恢复后成为普通成员。如果数据尚未从先前的 primary 复制到成员服务器,有可能会丢失数据。
  PRIMARY> db.test.insert({“name”:”foobar”,”age”:25})
  PRIMARY> db.test.find()
  { “_id” : ObjectId(“4f4f38fc47db2bfa5ceb2aee”), “name” : “foobar”, “age” : 25 }
  SECONDARY> db.test.find()
  error: { “$err” : “not master and slaveok=false”, “code” : 13435 }
  SECONDARY> db.test.insert({“name”:”foobar”,”age”:25})
  not master
  在主库上设置slaveok=ok (经过试验,发现需要在从库上设置ok)
  PRIMARY> db.getMongo().setSlaveOk()
  SECONDARY> use test
  switched to db test
  SECONDARY> db.test.find()
  { “_id” : ObjectId(“4f4f38fc47db2bfa5ceb2aee”), “name” : “foobar”, “age” : 25 }
  然后kill掉主库,会候选出一个作为主库,当修复后,就变成从库了
  插入数据时生成的id分为四个段 时间戳、主机号、进程号、计数器

运维网声明 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-308332-1-1.html 上篇帖子: spring-db-mongo配置 下篇帖子: mongo data compress
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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