MongoDB命令快速上手
MongoDB与MySQL的区别:
MongoDB是面向文档的DBMS(数据库管理系统),缺少事务机制(Transaction),不支持关联查询(Join),查询性能提升,索引难建立。
MySQL是传统的RDBMS(关系数据库管理系统),是以ACID(原子性、一致性、隔离性、持久性)为第一守则,实现分布式时,CA成为首要优先级。
CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。CAP原则是分布式计算系统的基石。
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写,BASE是对CAP中一致性和可用性权衡的结果,其核心思想是:即使无法做到强一致性(Strong consistency),但可以根据自身的业务特点,采用适当的方式使系统达到最终一致性(Eventual consistency)。
Mongodb中有多个databases,每个database可以创建多个collections,collection是底层数据分区(partition)的单位,每个collection都有多个底层的数据文件组成。
Mongodb 3.0默认存储引擎为MMAPV1(collection级的锁),3.2+默认引擎为wiredTiger(文档级的锁)。
MongoDB的优点,不用处理复杂的数据关系逻辑(连表查询),你想要的数据是什么样子,存在数据库里的就是什么样子(Schema)。在没有事务需求的情况下,Mongodb比mysql多了分盘容错性的好处,但是却没有因此而付出代价。
缺点,Mongodb无法做到ACID,所以对事务有要求的应用不适合用它。(2018 MongoDB4.0+版本已经可以支持事务了。)
MongoDB 数据操作
- 查询满足条件的数据
db.getCollection('players').find({"base.nick_name":''})
- 模糊查询(i 忽略大小写)
db.getCollection('players').find({'base.nick_name':/999/}) db.getCollection('players').find({'base.nick_name':/^M999/i})
- 查询所有数据,返回数据只包含指定字段
db.getCollection('players').find({},{'_id':1,'at':1,'base.nick_name':1})
- 查询指定字段满足条件的数据,只返回_id字段
$ne 不等于
$in 包含
$nin 不包含
$exists 字段存在
$mod 取模
$size 数组元素个数db.getCollection('players').find({"friends.frds":{$exists:true}},{'_id':1}) db.getCollection('players').find({'base.nick_name':{'$in':['qte123','kir']}})
- 查询对象数据转换
db.getCollection('players').find({"_id":ObjectId('123456789')})
- 批量更新
db.getCollection('players').update({},{$set:{'base.lv':NumberInt(20)}},{multi:true,upsert:false})
- 对输出结果处理
db.getCollection('players').find({}).forEach(function(u){printjsononeline(u)})
- 联合查询(MongoDB 3.5以上支持类型转换,低版本需要两字段类型相同)
db.getCollection('players').aggregate([{$lookup:{from:'accounts',localField:'_id',foreignField:'guid',as:"account"}}])
MongoDB 管理操作
- 备份:
mongodump -h <ip>:<port> -d dbname -o datadir
- 还原:
mongorestore -h <ip>:<port> -d dbname datadir
- 命令行连接MongoDB:
mongo [<username>:<password>@]<ip>:<port>/<dbname>
- 创建新数据库:
use new_dbname
- 其他:
help db # 显示当前DB show dbs show collections db.stats()
参考:
mongorocks引擎原理解析
MangoDB高级查询
MongoDB 备份(mongodump)与恢复(mongorestore)
CAP定理,BASE理论
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 using1174@foxmail.com
文章标题: MongoDB命令快速上手
文章字数: 751
本文作者: Jun
发布时间: 2019-01-23, 22:34:00
最后更新: 2020-01-14, 10:18:33
原始链接: http://yoursite.com/2019/01/23/MongoDB命令快速上手/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。