MongoDB

安装MongoDB

我选择的是windows平台的mongodb安装方式,也很简单,只需要 下载 对应操作系统版本的Mongodb即可。(建议下载ZIP的安装包)

怎么验证我们的mongodb已经可以使用了?
  1. 通过命令行切换到mongodb的安装目录, 我的目录为 G:\JavaData\mongoDB\bin
  2. 命令行执行 mongod –dbpath G:\JavaData\mongoDBDATA
    G:\JavaData\mongoDB\bin>mongod --dbpath G:\JavaData\mongoDBDATA
  3. 执行之后,可以观察到 waiting for connections on port 27017 表示mongodb已经启动成功了

MongoDB常规操作

Mongodb服务启动成功后,我们就可以使用客户端工具来连接mongodb了。 这里我们使用的是mongo提供的客户端工具,在我们刚才安装的mongodb目录下bin目录底下

同样的进入到我们的mongodb的bin目录,执行 mongo命令

G:\JavaData\mongoDB\bin>mongo
MongoDB shell version: 2.6.3
connecting to: test
>

当然,如果你已经将 G:\JavaData\mongoDB\bin 加入到环境变量中,你就可以不需要切换目录了,直接执行mongo即可看到效果。

通过上面的客户端连接结果可以看到,默认情况下会连接到 test这个数据库 。 如果我们想要知道mongodb现在有多少数据库,可以通过命令

> show dbs
admin   (empty)
foobar  0.203GB
local   0.078GB
piedra  0.078GB
>

如果想要知道当前是哪个数据库,使用 db 命令

> db
test

如果想要切换到其他的数据库, 使用命令 user <your-dbname>

> use piedra
switched to db piedra

显示当前数据库有哪一些集合 show collections

> show collections
system.indexes
users

当然,如果你第一次使用运行 show collection ,结果是空的,但是当你往集合里面插入数据后,就可以看到集合以及对应的数据库都会被创建。

> show dbs
admin   (empty)
foobar  0.203GB
local   0.078GB
piedra  0.078GB
> use demo
switched to db demo
> show collections
> db.users.insert({username:"linwenbin",pwd:"1234"})
WriteResult({ "nInserted" : 1 })
> db.users.find()
{ "_id" : ObjectId("55717e7ae25992bae59cca65"), "username" : "linwenbin", "pwd" : "1234" }
>

在上面的操作中,我们切换到demo数据库,并且创建了users这个集合,还往users集合插入一条数据。

mongodb中的集合和mysql,Oracle中的table是一样的概念。

插入数据

在mongodb中,插入数据使用命令 db.collectionName.insert({data}) 或者 db.collectionName.save({data})
这两个方法都可以正常工作。 对于 insert方法在上文中已经提到,这里演示save方法的使用。

> db
demo
> show collections
system.indexes
users
>
> db.users.save({username:"saveMethod",pwd:"123"}) 
WriteResult({ "nInserted" : 1 })

需要注意的是 save 方法在没有指定 _id的时候,工作方式和insert是一样的,但是如果指定了 _id 那么如果集合中已经有对应的_id了,就会用新的文档覆盖掉旧的文档。

修改数据

要修改数据,也有两种方式,一个是修改整个文档,一个是修改部分。首先先介绍修改整个文档的做法, 我们先把usres这个集合的数据都查询出来,方便和修改操作后的对比

> db.users.find()
{ "_id" : ObjectId("55717e7ae25992bae59cca65"), "username" : "linwenbin", "pwd" : "1234" }
{ "_id" : ObjectId("55717fd5e25992bae59cca66"), "username" : "saveMethod", "pwd" : "123" }
>

第一种方式: db.collectionName.update({criteria},{data}); 这个方法会替换整个文档。

> db.users.update({username:"linwenbin"},{age:22})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find({username:'linwenbin'})
>

可以发现,当我们修改完之后,再去查找username为’linwenbin’的数据就不存在了。

第二种方式: db.collectionName.update({criteria},{$set:{newData}}); 现在我们对另一条数据进行 $set的修改操作

> db.users.update({username:"saveMethod"},{$set:{pwd:"9999"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find()
{ "_id" : ObjectId("55717e7ae25992bae59cca65"), "age" : 22 }
{ "_id" : ObjectId("55717fd5e25992bae59cca66"), "username" : "saveMethod", "pwd" : "9999" }
>

可以观察到,username为 saveMethod的那条数据的pwd已经被成功修改为 ‘9999’了,而且其他属性并没有被新数据覆盖掉。

查询数据

mongodb的查询方法就是find方法了,上文中已经提到多次, db.collectionName.find({criteria})

> db.users.find({age:22})
{ "_id" : ObjectId("55717e7ae25992bae59cca65"), "age" : 22 }
>

如果都不指定find方法的条件,那么就是查询所有的数据了。

我们还可以通过指定查询结果显示哪一些字段,这个请查阅mongodb的manual手册。

删除数据

如果要删除某一个集合,可以通过 db.collectionName.drop(); 来删除。

如果删除某一个集合内的数据,则通过 db.collectionName.remove({criteria});
我们在上面操作的基础上,将 {age:22} 这条数据删除

> db.users.find()
{ "_id" : ObjectId("55717e7ae25992bae59cca65"), "age" : 22 }
{ "_id" : ObjectId("55717fd5e25992bae59cca66"), "username" : "saveMethod", "pwd" : "9999" }
> db.users.remove({age:22})
WriteResult({ "nRemoved" : 1 })
> db.users.find()
{ "_id" : ObjectId("55717fd5e25992bae59cca66"), "username" : "saveMethod", "pwd" : "9999" }
>

MongoDB索引

什么是索引?

索引是创建在表格之上的,对用户来说不可见。索引加快了查找的速度,但是会增加额外的空间,所以创建所以要谨慎,mongodb也对每一个Collection的索引个数有限制。

简单的说: 索引就是提供了一个能够更快的定位到数据的方法

mongodb怎么查询索引

要查看当前集合有哪些索引,可以通过命令 db.collectionName.getIndexes();

> db.users.getIndexes()
[
        {
                "v" : 1,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "demo.users"
        }
]
>

key为 _id 为默认的主键索引,创建集合的时候mongodb自动为我们创建。

mongodb怎么创建索引

那如果此时我们想要对users这个集合的 username创建索引,应该怎么操作?

> db.users.ensureIndex({username:1})
{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
}

这样就表示我们创建索引成功了,在来看看usres集合的索引。

> db.users.getIndexes()
[
        {
                "v" : 1,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "demo.users"
        },
        {
                "v" : 1,
                "key" : {
                        "username" : 1
                },
                "name" : "username_1",
                "ns" : "demo.users"
        }
]
>

我们发现,多了一个key为 username的索引。 其中创建索引 db.users.ensuerIndex({username:1}) 中的1 表示正序索引, -1表示逆序索引

mongodb怎么删除索引

要删除索引通过 db.collectionName.dropIndex(column) 来删除

> db.users.dropIndex({username:1})
{ "nIndexesWas" : 2, "ok" : 1 }
> db.users.getIndexes()
[
        {
                "v" : 1,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "demo.users"
        }
]
>

至此,简单的索引操作也记录完成了。

本篇文章目的为了快速上手MongoDB,若要了解更详细资料,读者可自行参考官网的Manual文档。

<<< 捐赠 >>>

转载请注明出处! 原文地址: http://webinglin.github.io

留言

2015-06-05