1下载与安装
下载:http://www.mongodb.org/downloads
安装:直接解压即可。
2启动
使用mongo.exerun启动即可,如下图所示。
在LINUX和WINDOWS系统下的使用大同小异,不同的地方主要是默认的数据存储目录。LINUX 类系统下存放在/data/db 下,而 WINDOWS会存放在C:\data\db下。可以在启动时使用--dbpath参数指定存储目录并启动。如:bin\mongod.exe--dbpathd:\data\mongo
常用启动参数:
run直接启动。例:./mongodrun
--dbpath 指定特定存储目录启动,若目录不存在则创建。例:./mongod--dbpath/var/data/mongo
--port 指定端口启动。例:./mongod--port12345
控制台的启动使用mongo.exe,如下图所示。
Email:MSN:wenpengsong@gmail.com- 2 -
文卓软件欢迎大家在www.tiyt.cn 上讨论相关话题
3基本概念
MongoDB由databases组成,databases由collections组成,collections由documents(相当于行)组成,而documents有fields(相当于列)组成。
MongoDB是异步写数据。
4常用命令
4.1调用命令
调用命令的方法db.help();若漏掉()则直接显示方法体。如下图所示。
可以看到方法的具体实现。是JavaScript程序。
4.2use
use demodb
创建demodb,不用担心demodb不会创建,当创建第一个collection时,demodb会自动创建。
4.3插入数据
db.unicorns.insert({name:'demo', sex: 'm', weight: 70})插入一个数据,collection为unicorns
使用db.getCollectionNames(),会得到unicorns和system.indexes。
system.indexes对每个DB都会有,用于记录index。Email:MSN:wenpengsong@gmail.com- 4 -
文卓软件欢迎大家在www.tiyt.cn 上讨论相关话题
db.unicorns.find()会看到document。如下所示
>use demodb
switchedto db demodb
>db.unicorns.insert({name: 'demo', sex: 'm', weight: 70})
>db.getCollectionNames()
["system.indexes", "unicorns" ]
>db.unicorns.find()
{ "_id": ObjectId("4da6eea3a8d5cd3b72081cf2
eight" :70 }
>db.system.indexes.find()
{ "name": "_id_", "ns" : "demodb.unicorns", "key" : { "_id" : 1 }, "v" : 0}
>
> db.unicorns.insert({name: 'Leto', gender: 'm',home: 'Arrakeen', worm: false})
>
4.4查询数据先插入测试数据
>db.unicorns.find()
{ "_id": ObjectId("4da6eea3a8d5cd3b72081cf2
eight" :70 }
{ "_id": ObjectId("4da6f09ea8d5cd3b72081cf3
"home" :"Arrakeen", "worm" : false }
db.unicorns.insert({name:'Horny', dob: new Date(1992,2,13,7,47), loves:['carrot','papaya'],
weight:600, gender: 'm', vampires: 63});
db.unicorns.insert({name:'Aurora', dob: new Date(1991, 0, 24, 13, 0), loves:['carrot','grape'],
weight:450, gender: 'f', vampires: 43});
db.unicorns.insert({name:'Unicrom', dob: new Date(1973, 1, 9, 22, 10),loves:['energon',
'redbull'],weight: 984, gender: 'm', vampires: 182});
db.unicorns.insert({name:'Roooooodles', dob: new Date(1979, 7, 18, 18, 44),loves:['apple'],
weight:575, gender: 'm', vampires: 99});
db.unicorns.insert({name:'Solnara', dob: new Date(1985, 6, 4, 2, 1), loves:['apple','carrot',
'chocolate'],weight:550, gender:'f', vampires:80});
db.unicorns.insert({name:'Ayna',dob: new Date(1998, 2, 7, 8, 30), loves: ['strawberry',
'lemon'],weight: 733, gender: 'f', vampires: 40});
db.unicorns.insert({name:'Kenny',dob: new Date(1997, 6, 1, 10, 42), loves: ['grape','lemon'],
weight:690, gender: 'm', vampires: 39});
db.unicorns.insert({name:'Raleigh', dob: new Date(2005, 4, 3, 0, 57), loves:['apple','sugar'],
weight:421, gender: 'm', vampires: 2});
db.unicorns.insert({name:'Leia', dob: new Date(2001, 9, 8, 14, 53), loves:['apple',
'watermelon'],weight: 601, gender: 'f', vampires: 33});
db.unicorns.insert({name:'Pilot', dob: new Date(1997, 2, 1, 5, 3), loves:['apple',
Email:MSN:wenpengsong@gmail.com
- 5-
文卓软件欢迎大家在www.tiyt.cn 上讨论相关话题
'watermelon'],weight: 650, gender: 'm', vampires: 54});
db.unicorns.insert({name:'Nimue', dob: new Date(1999, 11, 20, 16, 15),loves:['grape',
'carrot'],weight: 540, gender: 'f'});
db.unicorns.insert({name:'Dunx', dob: new Date(1976, 6, 18, 18, 18), loves:['grape',
'watermelon'],weight: 704, gender: 'm', vampires: 165});
4.4.1查询返回document
使用查询
db.unicorns.find({name:'Dunx'})
其他说明:
$lt,$lte, $gt, $gte and $ne分别表示小于、小于等于、大于、大于等于、
不等于
db.unicorns.find({gender: {$ne: 'f'}, weight: {$gte:701}})
$exists用于表示field是否存在
db.unicorns.find({vampires:{$exists: false}})
or和and
db.unicorns.find({gender:'f', $or: [{loves: 'apple'}, {loves: 'orange'}, {weight: {$lt:500}}]})
4.4.2查询返回fielddb.unicorns.find(null,{name: 1})
只返回name这个field,具体如下所示:
>db.unicorns.find(null, {name: 1})
{ "_id": ObjectId("4da6f22da8d5cd3b72081cf7
{ "_id": ObjectId("4da6f22da8d5cd3b72081cf6
{ "_id": ObjectId("4da6f22da8d5cd3b72081cf8
{ "_id": ObjectId("4da6f22da8d5cd3b72081cf9
{ "_id": ObjectId("4da6f22da8d5cd3b72081cfa
{ "_id": ObjectId("4da6f22da8d5cd3b72081cfb
{ "_id": ObjectId("4da6f22da8d5cd3b72081cfc
{ "_id": ObjectId("4da6f22da8d5cd3b72081cfd
{ "_id": ObjectId("4da6f22da8d5cd3b72081cfe
{ "_id": ObjectId("4da6f22da8d5cd3b72081cff
{ "_id": ObjectId("4da6f22da8d5cd3b72081d00
{ "_id": ObjectId("4da6f231a8d5cd3b72081d01
>db.unicorns.find(null, {name: 1,_id:0})
{ "name": "Aurora" }
{ "name": "Horny" }
{ "name": "Unicrom" }
{ "name": "Roooooodles" }
{ "name": "Solnara" }
{ "name": "Ayna" }
Email:MSN:wenpengsong@gmail.com- 6 -
文卓软件欢迎大家在www.tiyt.cn 上讨论相关话题
{ "name": "Kenny" }
{ "name": "Raleigh" }
{ "name": "Leia" }
{ "name": "Pilot" }
{ "name": "Nimue" }
{ "name": "Dunx" }
>
4.4.3结果排序
//heaviestunicorns first db.unicorns.find().sort({weight: -1})
//by vampire name then vampire kills:db.unicorns.find().sort({name: 1, vampires: -1}) 1表示升序,-1表示降序
4.4.4分页查询
db.unicorns.find().sort({weight:-1}).limit(2).skip(1)
得到第二个和第三个。limit规定查询个数,skip 规定忽略几个。4.4.5 查询数量
db.unicorns.count({vampires:{$gt: 50}})
或者
db.unicorns.find({vampires:{$gt: 50}}).count()
4.5删除数据db.unicorns.remove()
如下面所示。
>
4.6更新数据(与关系型差异较大)
db.unicorns.update({name:'Roooooodles'}, {weight: 590})
注意:此语句执行后,先查询name是'Roooooodles'的所有数据,然后将name是'Roooooodles'的整个document都替换为{weight:590}。
>db.unicorns.remove()
>db.unicorns.find()
Email:MSN:wenpengsong@gmail.com- 7 -
文卓软件欢迎大家在www.tiyt.cn 上讨论相关话题
即
db.unicorns.insert({name:'Roooooodles', dob: new Date(1979, 7, 18, 18, 44),loves:
['apple'],weight: 575, gender: 'm', vampires: 99});
整个替换为
{weight: 590}
执行$set,不会替换原有数据。
后会还原,但{weight:590}不会被替换,因为没有$set因此正确的更新方式如下
db.unicorns.update({name:'Roooooodles'}, {$set: {weight: 590}})
4.6.1增加field
db.unicorns.update({name:'Pilot'}, {$inc: {vampires: -2}}) $inc增加或减少数字
db.unicorns.update({name:'Aurora'}, {$push: {loves: 'sugar'}}) $push增加数组元素
$pop减少数组元素4.6.2 upset
若存在更新,否则添加
db.hits.update({page:'unicorns'}, {$inc: {hits: 1}}, true);db.hits.find();
使用第三个参数设置是否true(upset),默认是false
4.6.3批量更新
db.unicorns.update({},{$set: {vaccinated: true }}); db.unicorns.find({vaccinated:true});
不会将所有的数据的vaccinated都更新为true若将所有的数据的vaccinated都更新为true,则如下:db.unicorns.update({}, {$set: {vaccinated: true }}, false, true);db.unicorns.find({vaccinated: true});
4.7索引
创建索引的方式
db.unicorns.ensureIndex({name:1})
删除索引的方式
db.unicorns.update({weight:590}, {$set: {name: 'Roooooodles', dob: new Date (1979, 7,18,
18, 44),loves: ['apple'], gender: 'm', vampires: 99}})
Email:MSN:wenpengsong@gmail.com
- 8-
文卓软件欢迎大家在www.tiyt.cn 上讨论相关话题
db.unicorns.dropIndex({name:1})
创建独立索引
db.unicorns.ensureIndex({name:1}, {unique: true})
创建联合索引
db.unicorns.dropIndex({name:1, vampires: -1})
5其他
5.1使用web获得mongoDB的信息
使用
http://localhost:28017/
获得MongoDB的信息。
5.2数据备份和恢复
使用mongodump.exe备份数据库
mongodump--db learn --out backup
使用mongorestore.exe恢复数据库
mongorestore--collection unicorns backup/learn/unicorns.bson
5.3导入导出数据
从JSON和CSV格式导入导出mongoexport.exe和mongoimport.exemongoexport --db learn -collection unicorns
mongoexport --db learn -collection unicorns --csv -fieldsname,weight,vampires
6使用MongoDB什么时候使用MongoDB?
针对关系不是很紧密并且数据量较大的数据,例如股票数据。
Email:MSN:wenpengsong@gmail.com- 9 -