江边老黄 發表於 2020-12-25 17:06:00

MongoDb的优势和特性

<div>转载:https://www.yiibai.com/mongodb/mongodb_create_collection.html</div>
<div>&nbsp;</div>
<div>&nbsp; &nbsp; MongoDb接触过的使用场景,就是海量的日志的存储和查询,最多的时候,从600万数据里搜索,随着现在互联网的蓬勃发展,企业业务量也来越来越大,积累的数据也随之增加,传统的关系型数据库,遇到大数据量的查询,能查询出来没问题,但是给用户带来的体验非常不好,也阻挡了快速定位问题的速度,除了MongoDb,还有全文搜索引擎Elasticsearch ,也挺好用的</div>
<div>&nbsp;</div>
<div>------------------------MongoDb的优势和特性</div>
<div>1、事务支持(目前只支持单文档的事务,对复杂的事务场景不支持)</div>
<div>&nbsp;</div>
<div>2、灵活的文档模型(JSON格式存储接近真实对象模型,对开发者友好,方便快速迭代)</div>
<div>&nbsp;</div>
<div>3、高可用复制集(满足数据高可用、服务高可用的需求,运维简单,故障自动切换)</div>
<div>&nbsp;</div>
<div>4、可扩展分片集群(海量数据存储,服务能力水平扩展)</div>
<div>&nbsp;</div>
<div>5、高性能(mmapv1、wiredtiger、mongorocks(rocksdb)、in-memory 等多引擎支持满足各种场景需求)</div>
<div>&nbsp;</div>
<div>6、Gridfs(解决文件存储的需求)</div>
<div>&nbsp;</div>
<div>7、aggregation &amp; mapreduce(解决数据分析场景需求,用户可以自己写查询语句或脚本,将请求都分发到 MongoDB 上完成)</div>
<div>&nbsp;</div>
<div>从目前阿里云 MongoDB 云数据库上的用户看,MongoDB 的应用已经渗透到各个领域,比如游戏、物流、电商、内容管理、社交、物联网、视频直播等,</div>
<div>以下是几个实际的应用案例。</div>
<div>&nbsp;</div>
<div>游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新</div>
<div>&nbsp;</div>
<div>物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更</div>
<div>读取出来。</div>
<div>&nbsp;</div>
<div>社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能</div>
<div>&nbsp;</div>
<div>物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析</div>
<div>&nbsp;</div>
<div>视频直播,使用 MongoDB 存储用户信息、礼物信息等</div>
<div>&nbsp;</div>
<div>……</div>
<div>&nbsp;</div>
<div>如果你还在为是否应该使用 MongoDB,不如来做几个选择题来辅助决策(注:以下内容改编自 MongoDB 公司 TJ 同学的某次公开技术分享)。</div>
<div>应用不需要事物及复杂join支持</div>
<div>新应用,需求会变,数据模型无法确定,想快速迭代开发</div>
<div>应用需要2000-3000的读写QPS(甚至更高也可以)</div>
<div>应用需要TB或者PB级的数据存储</div>
<div>应用发展迅速,需要能快速水平扩展</div>
<div>应用要求存储的数据不丢失</div>
<div>应用需要99.999%的高可用</div>
<div>应用需要大量的地理位置查询和文本查询</div>
<div>&nbsp;</div>
<div>如果上述有一个符合,可以考虑MongoDB;如果有两个及以上符合,选择MongoDB绝不会后悔</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>----------------MongoDB的常见命令</div>
<div>1、MongoDB创建数据库</div>
<div>use DATABASE_NAME 命令来创建数据库。如果指定的数据库DATABASE_NAME不存在,则该命令将创建一个新的数据库,否则返回现有的数据库。</div>
<div>创建的数据库(newdb)不在列表中。要显示数据库,需要至少插入一个collection,空的数据库是不显示出来的。</div>
<div>db.items.insert({"name":"yiibai tutorials"})</div>
<div>show dbs 查看所有的DB</div>
<div>&nbsp;</div>
<div>2、MongoDB删除数据库</div>
<div>&gt;use newdb</div>
<div>switched to db newdb</div>
<div>&gt;db.dropDatabase()</div>
<div>&gt;{ "dropped" : "newdb", "ok" : 1 }</div>
<div>&nbsp;</div>
<div>3、MongoDB创建集合</div>
<div>没有使用选项的createCollection()方法的基本语法如下</div>
<div>&gt;use test</div>
<div>switched to db test</div>
<div>&gt;db.createCollection("mycollection")</div>
<div>{ "ok" : 1 }</div>
<div>&nbsp;</div>
<div>在 MongoDB 中,不需要创建集合。当插入一些文档时,MongoDB 会自动创建集合。</div>
<div>&gt;db.newcollection.insert({"name" : "yiibaitutorials"})</div>
<div>&gt;show collections</div>
<div>mycol</div>
<div>newcollection</div>
<div>mycollection</div>
<div>&nbsp;</div>
<div>4、MongoDB删除集合</div>
<div>MongoDB 的 db.collection.drop() 用于从数据库中删除集合。</div>
<div>&nbsp;</div>
<div>5、MongoDB数据类型</div>
<div>字符串 - 这是用于存储数据的最常用的数据类型。MongoDB中的字符串必须为UTF-8。</div>
<div>整型 - 此类型用于存储数值。 整数可以是32位或64位,具体取决于服务器。</div>
<div>布尔类型 - 此类型用于存储布尔值(true / false)值。</div>
<div>双精度浮点数 - 此类型用于存储浮点值。</div>
<div>最小/最大键 - 此类型用于将值与最小和最大BSON元素进行比较。</div>
<div>数组 - 此类型用于将数组或列表或多个值存储到一个键中。</div>
<div>时间戳 - ctimestamp,当文档被修改或添加时,可以方便地进行录制。</div>
<div>对象 - 此数据类型用于嵌入式文档。</div>
<div>Null - 此类型用于存储Null值。</div>
<div>符号 - 该数据类型与字符串相同; 但是,通常保留用于使用特定符号类型的语言。</div>
<div>日期 - 此数据类型用于以UNIX时间格式存储当前日期或时间。您可以通过创建日期对象并将日,月,年的日期进行指定自己需要的日期时间。</div>
<div>对象ID - 此数据类型用于存储文档的ID。</div>
<div>二进制数据 - 此数据类型用于存储二进制数据。</div>
<div>代码 - 此数据类型用于将JavaScript代码存储到文档中。</div>
<div>正则表达式 - 此数据类型用于存储正则表达式。</div>
<div>&nbsp;</div>
<div>6、MongoDB插入文档</div>
<div>insert()命令的基本语法如下:</div>
<div>&gt;db.COLLECTION_NAME.insert(document)</div>
<div>Shell</div>
<div>示例</div>
<div>&gt;db.mycol.insert({</div>
<div>&nbsp;&nbsp;&nbsp;_id: 100,</div>
<div>&nbsp;&nbsp;&nbsp;title: 'MongoDB Overview',</div>
<div>&nbsp;&nbsp;&nbsp;description: 'MongoDB is no sql database',</div>
<div>&nbsp;&nbsp;&nbsp;by: 'yiibai tutorials',</div>
<div>&nbsp;&nbsp;&nbsp;url: 'http://www.yiibai.com',</div>
<div>&nbsp;&nbsp;&nbsp;tags: ['mongodb', 'database', 'NoSQL'],</div>
<div>&nbsp;&nbsp;&nbsp;likes: 100,</div>
<div>})</div>
<div>&nbsp;</div>
<div>要在单个查询中插入多个文档,可以在insert()命令中传递文档数组。如下所示 -</div>
<div>&gt; db.mycol.insert([</div>
<div>&nbsp;&nbsp;&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_id: 101,</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title: 'MongoDB Guide',</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;description: 'MongoDB is no sql database',</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;by: 'yiibai tutorials',</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url: 'http://www.yiibai.com',</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tags: ['mongodb', 'database', 'NoSQL'],</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;likes: 100</div>
<div>&nbsp;&nbsp;&nbsp;},</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_id: 102,</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title: 'NoSQL Database',</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;description: "NoSQL database doesn't have tables",</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;by: 'yiibai tutorials',</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url: 'http://www.yiibai.com',</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tags: ['mongodb', 'database', 'NoSQL'],</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;likes: 210,</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comments: [</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user:'user1',</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message: 'My first comment',</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dateCreated: new Date(2017,11,10,2,35),</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;like: 0</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]</div>
<div>&nbsp;&nbsp;&nbsp;},</div>
<div>&nbsp;&nbsp;&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_id: 104,</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title: 'Python Quick Guide',</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;description: "Python Quick start ",</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;by: 'yiibai tutorials',</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url: 'http://www.yiibai.com',</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tags: ['Python', 'database', 'NoSQL'],</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;likes: 30,</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comments: [</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user:'user1',</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message: 'My first comment',</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dateCreated: new Date(2018,11,10,2,35),</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;like: 590</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]</div>
<div>&nbsp;&nbsp;&nbsp;}</div>
<div>])</div>
<div>&nbsp;</div>
<div>db.collection.insertOne()方法</div>
<div>&nbsp;</div>
<div>db.collection.insertOne()方法将单个文档插入到集合中。以下示例将新文档插入到库存集合中。</div>
<div>db.collection.insertOne()方法返回包含新插入的文档的`_id```字段值的文档。</div>
<div>执行结果如下 -</div>
<div>&gt; db.inventory.insertOne(</div>
<div>...&nbsp;&nbsp;&nbsp;&nbsp;{ item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }</div>
<div>... )</div>
<div>{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"acknowledged" : true,</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"insertedId" : ObjectId("5955220846be576f199feb55")</div>
<div>}</div>
<div>&gt;</div>
<div>如果文档没有指定_id字段,MongoDB会自动将_id字段与ObjectId值添加到新文档。</div>
<div>&nbsp;</div>
<div>db.collection.insertMany()方法db.collection.insertMany()方法将多个文档插入到集合中,可将一系列文档传递给db.collection.insertMany()方法。</div>
<div>以下示例将三个新文档插入到库存集合中。如果文档没有指定_id字段,MongoDB会向每个文档添加一个ObjectId值的_id字段。</div>
<div>insertMany()返回包含新插入的文档_id字段值的文档。执行结果如下 -</div>
<div>&gt; db.inventory.insertMany([</div>
<div>...&nbsp;&nbsp;&nbsp;&nbsp;{ item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },</div>
<div>...&nbsp;&nbsp;&nbsp;&nbsp;{ item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },</div>
<div>...&nbsp;&nbsp;&nbsp;&nbsp;{ item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }</div>
<div>... ])</div>
<div>{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"acknowledged" : true,</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"insertedIds" : [</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectId("59552c1c46be576f199feb56"),</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectId("59552c1c46be576f199feb57"),</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectId("59552c1c46be576f199feb58")</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]</div>
<div>}</div>
<div>&gt;</div>
<div>&nbsp;</div>
<div>7、MongoDB查询文档</div>
<div>find()方法:find()方法将以【非结构化】的方式显示所有文档。</div>
<div>&gt;db.COLLECTION_NAME.find(document)</div>
<div>pretty()方法:要以【格式化】的方式显示结果,可以使用pretty()方法。</div>
<div>&gt;db.mycol.find().pretty()</div>
<div>{</div>
<div>&nbsp;&nbsp;&nbsp;"_id": 100,</div>
<div>&nbsp;&nbsp;&nbsp;"title": "MongoDB Overview",</div>
<div>&nbsp;&nbsp;&nbsp;"description": "MongoDB is no sql database",</div>
<div>&nbsp;&nbsp;&nbsp;"by": "yiibai tutorials",</div>
<div>&nbsp;&nbsp;&nbsp;"url": "http://www.yiibai.com",</div>
<div>&nbsp;&nbsp;&nbsp;"tags": ["mongodb", "database", "NoSQL"],</div>
<div>&nbsp;&nbsp;&nbsp;"likes": "100"</div>
<div>}</div>
<div>&gt;</div>
<div>MongoDB 与 RDBMS的等效 Where 子句要在一些条件的基础上查询文档,可以使用以下操作。</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>操作&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;语法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;示例&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RDBMS等效语句</div>
<div>&nbsp;</div>
<div>相等&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&lt;key&gt;:&lt;value&gt;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.mycol.find({"by":"yiibai"}).pretty()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where by = 'yiibai'</div>
<div>&nbsp;</div>
<div>小于&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&lt;key&gt;:{$lt:&lt;value&gt;}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.mycol.find({"likes":{$lt:50}}).pretty()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where likes &lt; 50</div>
<div>&nbsp;</div>
<div>小于等于&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&lt;key&gt;:{$lte:&lt;value&gt;}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.mycol.find({"likes":{$lte:50}}).pretty()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where likes &lt;= 50</div>
<div>&nbsp;</div>
<div>大于&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&lt;key&gt;:{$gt:&lt;value&gt;}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.mycol.find({"likes":{$gt:50}}).pretty()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where likes &gt; 50</div>
<div>&nbsp;</div>
<div>大于等于&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&lt;key&gt;:{$gte:&lt;value&gt;}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.mycol.find({"likes":{$gte:50}}).pretty()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where likes &gt;= 50</div>
<div>&nbsp;</div>
<div>不等于&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&lt;key&gt;:{$ne:&lt;value&gt;}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.mycol.find({"likes":{$ne:50}}).pretty()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where likes != 50</div>
<div>&nbsp;</div>
<div>MongoDB中的AND操作符</div>
<div>&nbsp;</div>
<div>&gt;db.mycol.find(</div>
<div>&nbsp;&nbsp;&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$and: [</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{key1: value1}, {key2:value2}</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]</div>
<div>&nbsp;&nbsp;&nbsp;}</div>
<div>).pretty()</div>
<div>&nbsp;</div>
<div>&gt; db.mycol.find({$and:[{"by":"yiibai tutorials"},{"title": "MongoDB Overview"}]}).pretty()</div>
<div>{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"_id" : 100,</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"title" : "MongoDB Overview",</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"description" : "MongoDB is no sql database",</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"by" : "yiibai tutorials",</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"url" : "http://www.yiibai.com",</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"tags" : [</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"mongodb",</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"database",</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"NoSQL"</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"likes" : 100</div>
<div>}</div>
<div>&gt;</div>
<div>&nbsp;</div>
<div>对于上面给出的例子,等效的SQL where子句是 -</div>
<div>SELECT * FROM mycol where by ='yiibai tutorials' AND title ='MongoDB Overview'</div>
<div>&nbsp;</div>
<div>MongoDB中的OR操作符语法</div>
<div>在要根据OR条件查询文档,需要使用$or关键字。 以下是OR条件的基本语法 -</div>
<div>&gt;db.mycol.find(</div>
<div>&nbsp;&nbsp;&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$or: [</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{key1: value1}, {key2:value2}</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]</div>
<div>&nbsp;&nbsp;&nbsp;}</div>
<div>).pretty()</div>
<div>&nbsp;</div>
<div>示例</div>
<div>以下示例将显示由“yiibai tutorials”编写或标题为“MongoDB Overview”的所有教程。</div>
<div>&gt;db.mycol.find({$or:[{"by":"yiibai tutorials"},{"title": "MongoDB Overview"}]}).pretty()</div>
<div>{</div>
<div>&nbsp;&nbsp;&nbsp;"_id": 100,</div>
<div>&nbsp;&nbsp;&nbsp;"title": "MongoDB Overview",</div>
<div>&nbsp;&nbsp;&nbsp;"description": "MongoDB is no sql database",</div>
<div>&nbsp;&nbsp;&nbsp;"by": "yiibai tutorials",</div>
<div>&nbsp;&nbsp;&nbsp;"url": "http://www.yiibai.com",</div>
<div>&nbsp;&nbsp;&nbsp;"tags": ["mongodb", "database", "NoSQL"],</div>
<div>&nbsp;&nbsp;&nbsp;"likes": "100"</div>
<div>}</div>
<div>&gt;</div>
<div>&nbsp;</div>
<div>使用 AND 和 OR 条件一起</div>
<div>&nbsp;</div>
<div>SELECT * FROM mycol where likes&gt; 10 AND(by ='yiibai tutorials' OR title ='MongoDB Overview')</div>
<div>&nbsp;</div>
<div>&gt;db.mycol.find({"likes": {$gt:10}, $or: [{"by": "yiibai tutorials"},</div>
<div>&nbsp;&nbsp;&nbsp;{"title": "MongoDB Overview"}]}).pretty()</div>
<div>{</div>
<div>&nbsp;&nbsp;&nbsp;"_id": 100,</div>
<div>&nbsp;&nbsp;&nbsp;"title": "MongoDB Overview",</div>
<div>&nbsp;&nbsp;&nbsp;"description": "MongoDB is no sql database",</div>
<div>&nbsp;&nbsp;&nbsp;"by": "yiibai tutorials",</div>
<div>&nbsp;&nbsp;&nbsp;"url": "http://www.yiibai.com",</div>
<div>&nbsp;&nbsp;&nbsp;"tags": ["mongodb", "database", "NoSQL"],</div>
<div>&nbsp;&nbsp;&nbsp;"likes": "100"</div>
<div>}</div>
<div>&gt;</div>
<div>&nbsp;</div>
<div>8、MongoDB更新文档</div>
<div>默认情况下,MongoDB只会更新一个文档。要更新多个文档,需要将参数’multi‘设置为true。</div>
<div>&gt;db.mycol.update({'title':'MongoDB Overview'},</div>
<div>&nbsp;&nbsp;&nbsp;{$set:{'title':'New Update MongoDB Overview'}},{multi:true})</div>
<div>&nbsp;</div>
<div>9、MongoDB删除文档</div>
<div>&nbsp;</div>
<div>&gt;db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)</div>
<div>&nbsp;</div>
<div>10.MongoDB投影(选择字段)</div>
<div>find()方法MongoDB的find()方法,在 MongoDB 查询文档中此方法接收的第二个可选参数是要检索的字段列表。 在MongoDB中,当执行find()方法时,它默认将显示文档的所有字段。</div>
<div>为了限制显示的字段,需要将字段列表对应的值设置为1或0。【1用于显示字段,而0用于隐藏字段。】</div>
<div>具有投影的find()方法的基本语法如下:</div>
<div>语法</div>
<div>&gt;db.COLLECTION_NAME.find({},{KEY:1})</div>
<div>&gt; db.mycol.find({}, {'title':1,'_id':0})</div>
<div>&nbsp;</div>
<div>11、MongoDB限制记录数</div>
<div>db.COLLECTION_NAME.find().limit(NUMBER)</div>
<div>&nbsp;</div>
<div>12、MongoDB排序记录</div>
<div>MongoDB sort()方法要在MongoDB中排序文档,需要使用sort()方法。 该方法接受包含字段列表及其排序顺序的文档。使用指定排序顺序1和-1。 【1用于升序,而-1用于降序。】</div>
<div>语法</div>
<div>sort()方法的基本语法如下 -</div>
<div>&gt;db.COLLECTION_NAME.find().sort({KEY:1})</div>
<div>&nbsp;</div>
<div>13、MongoDB索引</div>
<div>ensureIndex()方法要创建索引,需要使用MongoDB的ensureIndex()方法。</div>
<div>语法</div>
<div>ensureIndex()方法的基本语法如下 -</div>
<div>&gt;db.COLLECTION_NAME.ensureIndex({KEY:1})</div>
<div>Shell</div>
<div>这里的key是要在其上创建索引的字段的名称,1是升序。 要按降序创建索引,需要使用-1。</div>
<div>示例</div>
<div>&gt;db.mycol.ensureIndex({"title":1})</div>
<div>Shell</div>
<div>在ensureIndex()方法中,可以传递多个字段,以在多个字段上创建索引。</div>
<div>&gt;db.mycol.ensureIndex({"title":1,"description":-1})</div>
<div>&gt;</div>
<div>&nbsp;</div>
<div>14、MongoDB聚合</div>
<div>select by_user, count(*) as num_tutorial from `article` group by by_user;</div>
<div>&nbsp;</div>
<div>表达式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;描述&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;示例</div>
<div>$sum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从集合中的所有文档中求出定义的值。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])</div>
<div>&nbsp;</div>
<div>$avg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;计算集合中所有文档的所有给定值的平均值。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])</div>
<div>&nbsp;</div>
<div>$min&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从集合中的所有文档获取相应值的最小值。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])</div>
<div>&nbsp;</div>
<div>$max&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从集合中的所有文档获取相应值的最大值。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])</div>
<div>&nbsp;</div>
<div>$push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将值插入到生成的文档中的数组中。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])</div>
<div>&nbsp;</div>
<div>$addToSet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将值插入生成的文档中的数组,但不会创建重复项。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])</div>
<div>&nbsp;</div>
<div>$first&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据分组从源文档获取第一个文档。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])</div>
<div>&nbsp;</div>
<div>$last&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据分组从源文档获取最后一个文档。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])</div>
<div>15、MongoDB复制</div>
<div>保持数据安全</div>
<div>数据的高可用性(24 * 7)</div>
<div>灾难恢复维护无停机(如备份,索引重建,压缩)</div>
<div>读取缩放(额外的副本可读)</div>
<div>副本集对应用程序是透明的</div>
<div>&nbsp;</div>
<div>16、MongoDB分片</div>
<div>在复制中,所有写入都转到主节点</div>
<div>延迟敏感查询到主节点</div>
<div>单个副本集合有12个节点的限制当活动数据集较大时,内存不足够大</div>
<div>本地磁盘不够大</div>
<div>垂直扩缩太昂贵了</div>
<div>&nbsp;</div>
<div>17、MongoDB备份与恢复</div>
<div>要在MongoDB中创建数据库备份,应该使用 mongodump 命令。 此命令将导出转储服务器的整个数据到转储目录。有许多选项可用于限制数据量或创建远程服务器的备份。</div>
<div>语法</div>
<div>mongodump命令的基本语法如下:</div>
<div>&gt; mongodump</div>
<div>&nbsp;</div>
<div>恢复数据要恢复备份数据,使用MongoDB的 mongorestore 命令。 此命令从备份目录中恢复所有数据。</div>
<div>语法</div>
<div>mongorestore命令的基本语法是 -</div>
<div>&gt; mongorestore</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>18、MongoDB部署</div>
<div>mongostat</div>
<div>此命令检查所有运行的mongod实例的状态,并返回数据库操作的计数器。 这些计数器包括插入,查询,更新,删除和游标。</div>
<div>命令还显示遇到页面错误,并显示锁定百分比。这可以用来监控内存不足,写入容量或出现性能问题。</div>
<div>要运行命令,首先要启动mongod实例。 在另一个命令提示符下,转到 mongodb 安装的bin目录,然后键入:mongostat。</div>
<div>D:\Program Files\MongoDB\Server\3.4\bin&gt; mongostat</div>
<div>&nbsp;</div>
<div>mongotop</div>
<div>此命令跟踪并报告基于集合的 MongoDB 实例的读写活动。 默认情况下,mongotop会在每秒钟内返回信息,但是可相应地更改信息。</div>
<div>应该检查此读写活动是否符合您的应用意图,并且要一次对数据库发出太多的写入操作,从磁盘读取的频率太高,或者超出了工作集合大小。</div>
<div>要运行命令,请启动 mongod 实例。 在另一个命令提示符下,转到 mongodb 安装的bin目录,然后键入:mongotop。</div>
<div>D:\Program Files\MongoDB\Server\3.4\bin&gt; mongotop</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>

</div>
<div id="MySignature" role="contentinfo">
    知人者智,自知者明,胜人者有力,自胜者强。<br><br>
来源:https://www.cnblogs.com/nanfengxiangbei/p/14189848.html
頁: [1]
查看完整版本: MongoDb的优势和特性