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

[经验分享] 57-1、2、3 NoSQL基础及MongoDB、MongoDB基本应用、mongodb索引及复制集

[复制链接]

尚未签到

发表于 2018-10-25 10:30:35 | 显示全部楼层 |阅读模式
  02MongoDB基本应用
  配置环境:
  node1:192.168.1.121CentOS>
  [root@node1 ~]# cd mongodb-2.6.4/
  [root@node1 mongodb-2.6.4]# ls
  mongodb-org-2.6.4-1.x86_64.rpm         mongodb-org-shell-2.6.4-1.x86_64.rpm
  mongodb-org-mongos-2.6.4-1.x86_64.rpm  mongodb-org-tools-2.6.4-1.x86_64.rpm
  mongodb-org-server-2.6.4-1.x86_64.rpm
  [root@node1 mongodb-2.6.4]# yum install mongodb-org-server-2.6.4-1.x86_64.rpm mongodb-org-shell-2.6.4-1.x86_64.rpm mongodb-org-tools-2.6.4-1.x86_64.rpm -y
  [root@node1 mongodb-2.6.4]# cd
  [root@node1 ~]# mkdir -p /mongodb/data
  [root@node1 ~]#>
  uid=496(mongod) gid=492(mongod) groups=492(mongod)
  [root@node1 ~]# chown -R mongod.mongod /mongodb/
  [root@node1 ~]# vim /etc/mongod.conf
  修改
  dbpath=/var/lib/mongo
  
  dbpath=/mongodb/data
  修改
  bind_ip=127.0.0.1
  
  #bind_ip=127.0.0.1
  修改
  #httpinterface=true
  
  httpinterface=true
  rest=true
  
  [root@node1 ~]# service mongod start
  [root@node1 ~]# ls /mongodb/data/
  journal  local.0  local.ns  mongod.lock  _tmp
  [root@node1 ~]# du -sh /mongodb/data/
  3.1G    /mongodb/data/
  [root@node1 ~]# ss -tnl
  State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
  LISTEN     0      128                      :::39591                   :::*     
  LISTEN     0      128                       *:27017                    *:*     
  LISTEN     0      128                      :::111                     :::*     
  LISTEN     0      128                       *:111                      *:*     
  LISTEN     0      128                       *:28017                    *:*     
  LISTEN     0      128                       *:46453                    *:*     
  LISTEN     0      128                      :::22                      :::*     
  LISTEN     0      128                       *:22                       *:*     
  LISTEN     0      128               127.0.0.1:631                      *:*     
  LISTEN     0      128                     ::1:631                     :::*     
  LISTEN     0      100                     ::1:25                      :::*     
  LISTEN     0      100               127.0.0.1:25                       *:*
  [root@node1 ~]# mongo --host 192.168.1.121
  MongoDB shell version: 2.6.4
  connecting to: 192.168.1.121:27017/test
  Welcome to the MongoDB shell.
  For interactive help, type "help".
  For more comprehensive documentation, see
  http://docs.mongodb.org/
  Questions? Try the support group
  http://groups.google.com/group/mongodb-user
  > show dbs
  admin  (empty)
  local  0.078GB
  > use testdb
  switched to db testdb
  > show dbs
  admin  (empty)
  local  0.078GB
  > db.stats()
  {
  "db" : "testdb",
  "collections" : 0,
  "objects" : 0,
  "avgObjSize" : 0,
  "dataSize" : 0,
  "storageSize" : 0,
  "numExtents" : 0,
  "indexes" : 0,
  "indexSize" : 0,
  "fileSize" : 0,
  "dataFileVersion" : {
  },
  "ok" : 1
  }
  > db.version()
  2.6.4
  > db.getCollectionNames()
  [ ]
  #插入数据
  > db.students.insert({name:"tom",age:23})
  WriteResult({ "nInserted" : 1 })
  > show collections
  students
  system.indexes
  > show dbs
  admin   (empty)
  local   0.078GB
  testdb  0.078GB
  > db.students.stats()
  {
  "ns" : "testdb.students",
  "count" : 1,
  "size" : 112,
  "avgObjSize" : 112,
  "storageSize" : 8192,
  "numExtents" : 1,
  "nindexes" : 1,
  "lastExtentSize" : 8192,
  "paddingFactor" : 1,
  "systemFlags" : 1,
  "userFlags" : 1,
  "totalIndexSize" : 8176,
  "indexSizes" : {
  "_id_" : 8176
  },
  "ok" : 1
  }
  > db.getCollectionNames()
  [ "students", "system.indexes" ]
  > db.students.insert ({name:"jerry",age:40,gender:"M"})
  WriteResult({ "nInserted" : 1 })
  > db.students.stats()
  {
  "ns" : "test.students",
  "count" : 1,
  "size" : 112,
  "avgObjSize" : 112,
  "storageSize" : 8192,
  "numExtents" : 1,
  "nindexes" : 1,
  "lastExtentSize" : 8192,
  "paddingFactor" : 1,
  "systemFlags" : 1,
  "userFlags" : 1,
  "totalIndexSize" : 8176,
  "indexSizes" : {
  "_id_" : 8176
  },
  "ok" : 1
  }
  #帮助:
  > db.mycoll.help()
  > db.mycoll.find.help()
  > db.students.find()
  { "_id" : ObjectId("58720933110b5df571418845"), "name" : "jerry", "age" : 40, "gender" : "M" }
  { "_id" : ObjectId("58720a26110b5df571418846"), "name" : "tom", "age" : 23 }
  > db.students.count()
  2
  > db.students.insert({name:"Ou Yangfeng",Age:90,Course:"HaMogong"})
  WriteResult({ "nInserted" : 1 })
  > db.students.insert({name:"Yang Guo",Age:20,Course:"Meinv Quan"})
  WriteResult({ "nInserted" : 1 })
  > db.students.insert({name:"Guo Jing",Age:40,Course:"Xiangchong Shibazhang"})
  WriteResult({ "nInserted" : 1 })
  #查询年龄大于30的记录
  > db.students.find({Age:{$gt: 30}})
  { "_id" : ObjectId("58720b48110b5df571418847"), "name" : "Ou Yangfeng", "Age" : 90, "Course" : "HaMogong" }
  { "_id" : ObjectId("58720ba8110b5df571418849"), "name" : "Guo Jing", "Age" : 40, "Course" : "Xiangchong Shibazhang" }
  #查询年龄在20到40之间的记录
  > db.students.find({Age:{$in: [20,40]}})
  { "_id" : ObjectId("58720b71110b5df571418848"), "name" : "Yang Guo", "Age" : 20, "Course" : "Meinv Quan" }
  { "_id" : ObjectId("58720ba8110b5df571418849"), "name" : "Guo Jing", "Age" : 40, "Course" : "Xiangchong Shibazhang" }
  #查看年龄不在20到40之间的记录
  > db.students.find({Age:{$nin: [20,40]}})
  { "_id" : ObjectId("58720933110b5df571418845"), "name" : "jerry", "age" : 40, "gender" : "M" }
  { "_id" : ObjectId("58720a26110b5df571418846"), "name" : "tom", "age" : 23 }
  { "_id" : ObjectId("58720b48110b5df571418847"), "name" : "Ou Yangfeng", "Age" : 90, "Course" : "HaMogong" }
  #查看Age或age值不在20到40之间的记录
  > db.students.find({$or: [{Age: {$nin: [20,40]}}, {age:{$nin:[20,40]}}]})
  { "_id" : ObjectId("58720933110b5df571418845"), "name" : "jerry", "age" : 40, "gender" : "M" }
  { "_id" : ObjectId("58720a26110b5df571418846"), "name" : "tom", "age" : 23 }
  { "_id" : ObjectId("58720b48110b5df571418847"), "name" : "Ou Yangfeng", "Age" : 90, "Course" : "HaMogong" }
  { "_id" : ObjectId("58720b71110b5df571418848"), "name" : "Yang Guo", "Age" : 20, "Course" : "Meinv Quan" }
  { "_id" : ObjectId("58720ba8110b5df571418849"), "name" : "Guo Jing", "Age" : 40, "Course" : "Xiangchong Shibazhang" }
  #查看Age或age值在20到40之间的记录
  > db.students.find({$or: [{Age: {$in: [20,40]}}, {age:{$in:[20,40]}}]})
  { "_id" : ObjectId("58720933110b5df571418845"), "name" : "jerry", "age" : 40, "gender" : "M" }
  { "_id" : ObjectId("58720b71110b5df571418848"), "name" : "Yang Guo", "Age" : 20, "Course" : "Meinv Quan" }
  { "_id" : ObjectId("58720ba8110b5df571418849"), "name" : "Guo Jing", "Age" : 40, "Course" : "Xiangchong Shibazhang" }
  #查看存在gender字段的记录
  > db.students.find({gender: {$exists: true}})
  { "_id" : ObjectId("58720933110b5df571418845"), "name" : "jerry", "age" : 40, "gender" : "M" }
  #查看不存在gender字段的记录
  > db.students.find({gender: {$exists: false}})
  { "_id" : ObjectId("58720a26110b5df571418846"), "name" : "tom", "age" : 23 }
  { "_id" : ObjectId("58720b48110b5df571418847"), "name" : "Ou Yangfeng", "Age" : 90, "Course" : "HaMogong" }
  { "_id" : ObjectId("58720b71110b5df571418848"), "name" : "Yang Guo", "Age" : 20, "Course" : "Meinv Quan" }
  { "_id" : ObjectId("58720ba8110b5df571418849"), "name" : "Guo Jing", "Age" : 40, "Course" : "Xiangchong Shibazhang" }
  #修改"tom"的age为21
  > db.students.find()
  { "_id" : ObjectId("58720933110b5df571418845"), "name" : "jerry", "age" : 40, "gender" : "M" }
  { "_id" : ObjectId("58720a26110b5df571418846"), "name" : "tom", "age" : 23 }
  { "_id" : ObjectId("58720b48110b5df571418847"), "name" : "Ou Yangfeng", "Age" : 90, "Course" : "HaMogong" }
  { "_id" : ObjectId("58720b71110b5df571418848"), "name" : "Yang Guo", "Age" : 20, "Course" : "Meinv Quan" }
  { "_id" : ObjectId("58720ba8110b5df571418849"), "name" : "Guo Jing", "Age" : 40, "Course" : "Xiangchong Shibazhang" }
  > db.students.update({name:"tom"},{$set: {age: 21}})
  WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
  > db.students.find()
  { "_id" : ObjectId("58720933110b5df571418845"), "name" : "jerry", "age" : 40, "gender" : "M" }
  { "_id" : ObjectId("58720a26110b5df571418846"), "name" : "tom", "age" : 21 }
  { "_id" : ObjectId("58720b48110b5df571418847"), "name" : "Ou Yangfeng", "Age" : 90, "Course" : "HaMogong" }
  { "_id" : ObjectId("58720b71110b5df571418848"), "name" : "Yang Guo", "Age" : 20, "Course" : "Meinv Quan" }
  { "_id" : ObjectId("58720ba8110b5df571418849"), "name" : "Guo Jing", "Age" : 40, "Course" : "Xiangchong Shibazhang" }
  #删除age值为21的记录
  > db.students.remove({age:21})
  WriteResult({ "nRemoved" : 1 })
  > db.students.find()
  { "_id" : ObjectId("58720933110b5df571418845"), "name" : "jerry", "age" : 40, "gender" : "M" }
  { "_id" : ObjectId("58720b48110b5df571418847"), "name" : "Ou Yangfeng", "Age" : 90, "Course" : "HaMogong" }
  { "_id" : ObjectId("58720b71110b5df571418848"), "name" : "Yang Guo", "Age" : 20, "Course" : "Meinv Quan" }
  { "_id" : ObjectId("58720ba8110b5df571418849"), "name" : "Guo Jing", "Age" : 40, "Course" : "Xiangchong Shibazhang" }
  #统计Age值在20到40之间的记录数
  > db.students.find({Age: {$in: [20,40]}}).count()
  2
  #显示Age值在20到40之间的记录,仅显示满足条件的第一条记录
  > db.students.find({Age: {$in: [20,40]}}).limit(1)
  { "_id" : ObjectId("58720b71110b5df571418848"), "name" : "Yang Guo", "Age" : 20, "Course" : "Meinv Quan" }
  #显示Age值在20到40之间的记录,第一条记录不显示
  > db.students.find({Age: {$in: [20,40]}}).skip(1)
  { "_id" : ObjectId("58720ba8110b5df571418849"), "name" : "Guo Jing", "Age" : 40, "Course" : "Xiangchong Shibazhang" }
  #显示Age值大于10的记录,仅显示一条满足条件的记录
  > db.students.findOne({Age: {$gt: 10}})
  {
  "_id" : ObjectId("58720b48110b5df571418847"),
  "name" : "Ou Yangfeng",
  "Age" : 90,
  "Course" : "HaMogong"
  }
  #删除students表
  > db.students.drop()
  true
  > show collections;
  system.indexes
  > db.stats()
  {
  "db" : "test",
  "collections" : 2,
  "objects" : 1,
  "avgObjSize" : 48,
  "dataSize" : 48,
  "storageSize" : 16384,
  "numExtents" : 2,
  "indexes" : 0,
  "indexSize" : 0,
  "fileSize" : 67108864,
  "nsSizeMB" : 16,
  "dataFileVersion" : {
  "major" : 4,
  "minor" : 5
  },
  "extentFreeList" : {
  "num" : 2,
  "totalSize" : 139264
  },
  "ok" : 1
  }
  #删除数据库
  > db.dropDatabase()
  { "dropped" : "test", "ok" : 1 }
  > show dbs
  admin   (empty)
  local   0.078GB
  testdb  0.078GB
  03mongodb索引及复制集
  [root@node1 ~]# mongo
  MongoDB shell version: 2.6.4
  connecting to: test
  > use testdb
  switched to db testdb
  > for (i=1;i db.students.find().count()
  10000
  > db.students.find()
  { "_id" : ObjectId("5871e94113222f399a5240a3"), "name" : "tom", "age" : 23 }
  { "_id" : ObjectId("587232dba7eb9c0c7bd54561"), "name" : "student1", "age" : 1, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd54562"), "name" : "student2", "age" : 2, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd54563"), "name" : "student3", "age" : 3, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd54564"), "name" : "student4", "age" : 4, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd54565"), "name" : "student5", "age" : 5, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd54566"), "name" : "student6", "age" : 6, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd54567"), "name" : "student7", "age" : 7, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd54568"), "name" : "student8", "age" : 8, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd54569"), "name" : "student9", "age" : 9, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd5456a"), "name" : "student10", "age" : 10, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd5456b"), "name" : "student11", "age" : 11, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd5456c"), "name" : "student12", "age" : 12, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd5456d"), "name" : "student13", "age" : 13, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd5456e"), "name" : "student14", "age" : 14, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd5456f"), "name" : "student15", "age" : 15, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd54570"), "name" : "student16", "age" : 16, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd54571"), "name" : "student17", "age" : 17, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd54572"), "name" : "student18", "age" : 18, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  { "_id" : ObjectId("587232dba7eb9c0c7bd54573"), "name" : "student19", "age" : 19, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  #在name字段上构建一个升序索引
  > db.students.ensureIndex({name: 1})
  {
  "createdCollectionAutomatically" : false,
  "numIndexesBefore" : 1,
  "numIndexesAfter" : 2,
  "ok" : 1
  }
  #显示表中索引
  > db.students.getIndexes()
  [
  {
  "v" : 1,
  "key" : {
  "_id" : 1
  },
  "name" : "_id_",
  "ns" : "testdb.students"
  },
  {
  "v" : 1,
  "key" : {
  "name" : 1
  },
  "name" : "name_1",
  "ns" : "testdb.students"
  }
  ]
  #删除索引
  > db.students.dropIndex("name_1")
  { "nIndexesWas" : 2, "ok" : 1 }
  > db.students.getIndexes()
  [
  {
  "v" : 1,
  "key" : {
  "_id" : 1
  },
  "name" : "_id_",
  "ns" : "testdb.students"
  }
  ]
  #创建唯一索引
  > db.students.ensureIndex({name: 1},{unique: true})
  {
  "createdCollectionAutomatically" : false,
  "numIndexesBefore" : 1,
  "numIndexesAfter" : 2,
  "ok" : 1
  }
  > db.students.getIndexes()
  [
  {
  "v" : 1,
  "key" : {
  "_id" : 1
  },
  "name" : "_id_",
  "ns" : "testdb.students"
  },
  {
  "v" : 1,
  "unique" : true,
  "key" : {
  "name" : 1
  },
  "name" : "name_1",
  "ns" : "testdb.students"
  }
  ]
  #创建唯一索引后,新增相同字段值会提示错误
  > db.students.insert({name: "student20", age: 20,})
  WriteResult({
  "nInserted" : 0,
  "writeError" : {
  "code" : 11000,
  "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: testdb.students.$name_1  dup key: { : \"student20\" }"
  }
  })
  > db.students.find({name: "student5000"})
  { "_id" : ObjectId("587232e4a7eb9c0c7bd558e8"), "name" : "student5000", "age" : 80, "address" : "#85 Wenhua Road, Zhengzhou, China" }
  #显示查找语句执行过程
  > db.students.find({name: "student5000"}).explain()
  {
  "cursor" : "BtreeCursor name_1",
  "isMultiKey" : false,
  "n" : 1,
  "nscannedObjects" : 1,
  "nscanned" : 1,
  "nscannedObjectsAllPlans" : 1,
  "nscannedAllPlans" : 1,
  "scanAndOrder" : false,
  "indexOnly" : false,
  "nYields" : 0,
  "nChunkSkips" : 0,
  "millis" : 0,
  "indexBounds" : {
  "name" : [
  [
  "student5000",
  "student5000"
  ]
  ]
  },
  "server" : "node1:27017",
  "filterSet" : false
  }
  > db.students.find({name: {$gt: "student5000"}}).explain()
  {
  "cursor" : "BtreeCursor name_1",
  "isMultiKey" : false,
  "n" : 5552,
  "nscannedObjects" : 5552,
  "nscanned" : 5552,
  "nscannedObjectsAllPlans" : 5552,
  "nscannedAllPlans" : 5552,
  "scanAndOrder" : false,
  "indexOnly" : false,
  "nYields" : 43,
  "nChunkSkips" : 0,
  "millis" : 13,
  "indexBounds" : {
  "name" : [
  [
  "student5000",
  {
  }
  ]
  ]
  },
  "server" : "node1:27017",
  "filterSet" : false
  }


运维网声明 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-626242-1-1.html 上篇帖子: 中国MongoDB开发者交流群 ​《MongoDB实战》交流群QQ群: 511943641 下篇帖子: 57-4 数据库分片概念及mongodb sharding的实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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