57-123 NoSQL基础及MongoDBMongoDB基本应用mongodb索引及复制集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了57-123 NoSQL基础及MongoDBMongoDB基本应用mongodb索引及复制集相关的知识,希望对你有一定的参考价值。

02MongoDB基本应用


配置环境:

node1:192.168.1.121CentOS release 6.7


[[email protected] ~]# cd mongodb-2.6.4/

[[email protected] 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


[[email protected] 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


[[email protected] mongodb-2.6.4]# cd

[[email protected] ~]# mkdir -p /mongodb/data

[[email protected] ~]# id mongod

uid=496(mongod) gid=492(mongod) groups=492(mongod)

[[email protected] ~]# chown -R mongod.mongod /mongodb/

[[email protected] ~]# 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

[[email protected] ~]# service mongod start

[[email protected] ~]# ls /mongodb/data/

journal  local.0  local.ns  mongod.lock  _tmp

[[email protected] ~]# du -sh /mongodb/data/

3.1G    /mongodb/data/

[[email protected] ~]# 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                       *:*


[[email protected] ~]# 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索引及复制集


[[email protected] ~]# mongo

MongoDB shell version: 2.6.4

connecting to: test

> use testdb

switched to db testdb

> for (i=1;i<=10000;i++) db.students.insert({name:"student"+i, age:(i%120), address:"#85 Wenhua Road, Zhengzhou, China"})

> 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

}



本文出自 “追梦” 博客,请务必保留此出处http://sihua.blog.51cto.com/377227/1890847

以上是关于57-123 NoSQL基础及MongoDBMongoDB基本应用mongodb索引及复制集的主要内容,如果未能解决你的问题,请参考以下文章

NoSQL理论基础及安装基本操作

Redis基础认识内存式NoSQL数据库及简单使用Redis

Redis基础认识内存式NoSQL数据库及简单使用Redis

python 基础 10.0 nosql 简介--redis 连接池及管道

第五十一课 NoSQL基础概念及MongoDB应用数据库分配概念

NoSQL学习笔记之——Redis基础