读百遍

MongoDB小结(更新中)

2015-05-01  本文已影响5066人  sleep_NULL

因为即将的工作需要,昨天特地安装并简单学习了MongodDB

安装的版本是 2.6.9
学习方式是阅读*** 官方Docs*** 可以在页面OPTIONS里选择pdf然后下载到本地
系统是win7 64位

关于安装过程就不多提了,官方Docs里有详细说明,实在碰壁网上也有很多教程可以填坑
安装的目录是D:\MongoDB
MongoDB默认的数据库目录是 \data\db,需要自己手动创建这两个文件夹,当然也可以在配置文件中指定其他目录

配置文件

Mongo本身没有配置文件,所以要自己手动添加,我将其创建于D:\MongoDB\mongod.cfg下,mongod.cfg文件中对Mongo的log和数据库路径进行配置,内容如下

logpath=d:\data\log\mongod.log
dbpath=d:\data\db
设置成windows服务

然后将其设置成windows服务,在cmd下键入如下命令(注意其中的空格)

sc.exe create MongoDB binPath= "d:\MongoDB\bin\mongod.exe --service --config=d:\MongoDB\mongod.cfg"

创建成功会有 [SC] CreateService 成功 的提示信息
若想删除该服务可以键入

sc delete MongoDB
启动MongoDB

然后每次开启在cmd下键入

net start MongoDB

关闭使用

net stop MongoDB

如果嫌麻烦可以考虑将其设置为开机自启,在之前的添加windows服务中添加 start= "auto",即

sc.exe create MongoDB binPath= "d:\MongoDB\bin\mongod.exe --service --config=d:\MongoDB\mongod.cfg" start= "auto"

或者手动在
控制面板>管理工具>服务
中找到MongoDB修改启动类型
到此MongoDB的安装配置基本完成
将MongoDB添加到windows服务是为了更好的启动MongoDB,通过配置的命令行你也可以知道:

启动MongoDB服务就是启动d:MongoDB\bin*目录下的mongod.exe*

接下来我们将认识该目录下的另一个重要命令行工具mongo shell,即mongo.exe,我们将使用它进行数据库的简单增删改查(CRUD)来熟悉MongoDB的入门级操作

启动MongoDB服务之后
双击mongo.exe(若将d:MongoDB\bin配置到环境变量中可直接在cmd下键入mongo)
将有类似如下的提示信息:

2015-05-03T13:38:11.507+0800 Hotfix KB2731284 or later update is not installed,
will zero-out data files
MongoDB shell version: 2.6.9
connecting to: test

其中打印了时间、版本以及当前连接数据库名(即:test)等信息
启动mongo shell默认进入 test 数据库
可以键入

db

查看当前所在数据库名,而键入

show dbs

将查看所有数据库名
你会发现并没有test,MongoDB在你往该数据库插入数据前,并没有真正创建该数据库,我们使用

use mydb

切换到一个新的数据mydb,同样使用 show dbs 你看不到该数据库,键入db,将显示新的数据库名mydb
接下来介绍几个概念,他们分别与传统的SQL数据库的这些概念一一对应:

mongo sql
collection(集合) table(表)
document(文档) row(行)
field(字段) column(列)

翻译不准确的话多多见谅
MongoDB是面向 文档 存储的nosql数据库,这里的文档主要指json格式类型,而所有的文档都存储在MongoDB数据库的 集合 中,就像SQL数据库中所有的行都存储在表中,MongoDB的每个数据库可以有很多个 集合,就像每个数据库可以有多张表

接下来我们创建两个文档,在mongo shell中输入

d1 =  {x: 3, y: 4}
d2 = {name: "mongo", age: 18}

然后插入到mydb中的test这个集合中

 db.test.insert(d1)
 db.test.insert(d2)

往集合中插入文档使用

db.集合名.insert(文档)

在这个过程中,如果集合不存在,MongoDB会隐式地自动创建该集合再进行插入,无需显式地去创建该集合,可以键入

show collections

查看当前数据库的全部集合,其中有个自动创建的system.indexes集合存储当前数据库下的所有索引
接下来查看刚才插入数据库的两条记录,键入

db.test.find()

将会打印刚才插入集合test中的两个文档,并且会自动给每个文档增加一个 _id 键值对
查询集合中的文档使用

db.集合名.find()

你还可以给find增加各种限制,来查询指定的文档
我们再往其中增加几个文档,来测试find的限制查询

db.test.insert({name:"bernie",age:23})
db.test.insert({name:"mike",age:22})
db.test.insert({name:"andy",age:30})
db.test.insert({name:"tony",age:25})
db.test.find()

现在集合打印出了6个文档,我们查找 age > 22 的所有文档的 name,键入

db.test.find({age: {$gt: 22}}, {name: 1})

将打印

{ "_id" : ObjectId("5545e1d9f26186a27992619e"), "name" : "bernie" }
{ "_id" : ObjectId("5545e208f26186a2799261a0"), "name" : "andy" }
{ "_id" : ObjectId("5545e22df26186a2799261a1"), "name" : "tony" }

三条文档,并且只有只有name而不显示age
接下来分析 db.test.find({age: {$gt: 22}}, {name: 1})

query criteria(查询规则) projection(投影)
{age: {$gt: 22}} {name: 1}

find的第一个参数是查询规则,即限定查询的条件,容易看出来是代表的是
age > 22,其中 $gt 是条件操作符代表 大于(greater than),以下附条件操作符的一一映射表

符号 含义
$eq =
$ne !=
$gt >
$lt <
$gte >=
$lte <=
$not !
$in in
$nin not in
$or or
$mod %

第二个参数投影{name:1}是对结果集的筛选,其中的 1 可以用 true 替换,而如果使用 0false 将会对结果集的投影进行取反,也就是除了name其他都会筛选出来
键入如下命令进行文档更新

db.test.update({x:3},{x:100,y:100})

然后键入 db.test.find() 查看刚才的 {x: 3, y: 4} 更新为了 {x:100, y:100}
update的第一个参数同样是 查询规则,第二个条件是具体修改内容,如下:

db.集合名.update(查询规则, 修改内容)

键入如下命令删除文档

db.test.remove({age:22})

使用 db.test.find() 发现包含 {age:22} 的文档已经删除,删除规则如下:

db.集合名.remove(查询规则)

增删改查基本完成

未完待续!(过两天填索引和bulk的坑)
上一篇下一篇

猜你喜欢

热点阅读