MongoDB学习札记 第一篇
MongoDB
安装MongoDB
我选择的是windows平台的mongodb安装方式,也很简单,只需要 下载 对应操作系统版本的Mongodb即可。(建议下载ZIP的安装包)
怎么验证我们的mongodb已经可以使用了?
- 通过命令行切换到mongodb的安装目录, 我的目录为 G:\JavaData\mongoDB\bin
- 命令行执行 mongod –dbpath G:\JavaData\mongoDBDATA
G:\JavaData\mongoDB\bin>mongod --dbpath G:\JavaData\mongoDBDATA
- 执行之后,可以观察到
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