基础术语
NoSQL Not only SQL
**集合(collection)**类似关系型数据库中的表
的概念
**文档(document)**类似关系型数据库中的行
的概念
**域(field)**类似列
**索引(index)**与关系型数据库的一样
安装
- 下载,并解压
- 设置环境变量
启动
-
启动mongod守护进程,至少要指定数据存储位置
mongod --dbpath /db/data
默认端口:27017,启动时通过
--port
设置 -
启动mongo客户端,安装里自带了一个shell client。
mongo
增删改查
mongodb的增删改查是通过mongodb的内置对象的函数来实现。
-
增
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', '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});
如果当前数据库没有
unicorns
这个集合,那么mongodb会自动创建,插入的数据是以二进制的串行JSON格式存储。默认情况,mongodb会自动创建一个_id
域,类型为OjbectID。 -
查
db.unicorns.find({gender: 'm', weight: {$gt: 700}})
-
$lt
小于 -
$lte
小于或等于 -
$gt
大于 -
$gte
大于或等于 -
$ne
不等于 -
$or
或db.unicorns.find({gender: 'f', $or: [{loves: 'apple'}, {loves: 'orange'}, {weight: {$lt: 500}}]}) //根据ObjectID查 db.unicorns.find({_id: ObjectId("TheObjectId")})
统计数量使用
count
db.unicorns.count({gender: 'm', weight: {$gt: 700}})
是否存在某个域:
db.unicorns.find({vampires: {$exists: false}})
-
-
删,使用
remove
db.unicorns.remove({gender: 'm', weight: {$gt: 700}})
-
改,update
注意:mongodb的update与关系型数据的update有些不一样
-
找到
{name: 'Roooooodles'}
的文档,然后使用{weight: 590}
替换整个文档db.unicorns.update({name: 'Roooooodles'}, {weight: 590})
-
重设某个文档的某个域的值
db.unicorns.update({name: 'Roooooodles'}, {$set: {weight: 590}})
-
对一个域的值进行增值或负值
db.unicorns.update({name: 'Pilot'}, {$inc: {vampires: -2}})
-
向一个为数组的域增值
db.unicorns.update({name: 'Aurora'}, {$push: {loves: 'sugar'}})
-
Upsert,根据是否存在值来决定是插入还是更新。方法是设置
update
的第三个参数为true
。你可以尝试:db.hits.update({page: 'unicorns'}, {$inc: {hits: 1}}); db.hits.find(); db.hits.update({page: 'unicorns'}, {$inc: {hits: 1}, true}); db.hits.find(); db.hits.update({page: 'unicorns'}, {$inc: {hits: 1}}, true); db.hits.find();
-
update 默认只更新符合条件的第一条文档,update第四个参数用于设置是否批量更新
db.unicorns.update({}, {$set: {vaccinated: true }}, false, true);
update
函数完全参数列表:| 参数 | 类型 | 说明 | | ------ | ------ | ----- | | 查询条件 | document | 需要更新哪些文档 | 更新说明 | document| 怎样更新 | upsert | boolean | 是否启用upsert,默认为false | 批量 | boolean | 是否启用批量更新,默认为false |writeConcern| document | 可选,2.6新增,A document expressing the write concern. Omit to use the default write concern. See Safe Writes.|
目前,本人不了解
writeConcern
。 -
查询小进阶
-
域的选择
db.unicorns.find(null, {name:1,_id:0});
find
的第二个参数用于设置选择域或排除某些域的查询,除了上面排除_id
域的情况外,参数中不可以同时包含选择域和排除。name:1
中的数值,0代表排除,非0代表选择域。 -
排序
db.unicorns.find().sort({weight: -1}) db.unicorns.find().sort({name: 1, vampires: -1})
1
代表升序,-1
代表降序,除此,不接受其它数字。注意:mongodb是限制排序对象大小的。 -
分页
db.unicorns.find().sort({weight: -1}).limit(2).skip(1)
-
计数
db.unicorns.count({vampires: {$gt: 50}}) db.unicorns.find({vampires: {$gt: 50}}).count()
资料
- 推荐根据文档中来练习