MongoDB小结(更新中)
因为即将的工作需要,昨天特地安装并简单学习了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 替换,而如果使用 0 或 false 将会对结果集的投影进行取反,也就是除了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(查询规则)
增删改查基本完成