mongodb学习总结
<p style="text-align: center"><strong><span style="font-size: 16px">mongodb学习总结</span></strong></p><p><strong>一丶什么是MongoDB</strong></p>
<p> MongoDB是一个基于分布式文件存储的数据库, 由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个结余关系数据库和非关系数据库之间的产品, 是非关系数据库当中功能最丰富,最像关系数据库的.</p>
<p> </p>
<p> </p>
<p><strong> 二丶MongoDB的基本概念</strong></p>
<p> MongoDB将数据存储为一个文档, 数据结构由键值(key=>value)对组成.</p>
<p> MongoDB文档类似于JSON对象. 字段值可以包含其他文档, 数组及文档数组.</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"name":"timfruit"<span style="color: rgba(0, 0, 0, 1)">,
</span>"age": 24<span style="color: rgba(0, 0, 0, 1)">,
</span>"hobby":["pingpong", "note"<span style="color: rgba(0, 0, 0, 1)">]
}</span></pre>
</div>
<p> </p>
<p> MongoDB中的基本概念是文档丶集合丶数据库.</p>
<p> MongoDB是面向文档的数据库, MongoDB中的文档相当于Mysql表中的一行数据, MongoDB中的文档是保存在集合中的, 向集合中插进一份文档, 相当于向MySql表中插入一行数据, 也就是说MongoDB中的集合类似于Mysql中的表.Mongodb的集合是保存在数据库中的, 在MongoDB的数据库中创建一个集合, 相当于在Mysql中database中创建一个</p>
<p> <img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190913215657943-1770098639.png"></p>
<p> </p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190913215815258-1241136122.png"></p>
<p> </p>
<p> </p>
<p><strong>三丶mongodb的基本操作(CRUD)</strong></p>
<p> 请先自行安装mongodb</p>
<p> 在linux安装mongodb</p>
<p> 在windows安装mongodb </p>
<p> </p>
<p> -- 运行mongod服务</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190913222836102-1525173181.png"></p>
<p> </p>
<p> -- 运行mongo客户端(可与服务进行交互)</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190913223113616-523453028.png"></p>
<p> mongo客户端的一些参数用法:</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190913225752542-1016230620.png"></p>
<p> </p>
<p> </p>
<p> 3.1)查看数据库</p>
<p> <img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914094437590-1267815553.png"></p>
<p> </p>
<p> show dbs 查看所有数据库</p>
<p> db 查看正在使用的数据库</p>
<p> </p>
<p> 3.2) 创建MongoDB数据库</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914100049485-742444622.png"></p>
<p> use <database> 并没有真正创建数据库, 而是插入了一些数据之后, 才会创建数据库和集合</p>
<p> </p>
<p> 3.3) 插入文档</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.inventory.insertOne(
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">canvas</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">100</span>, tags: [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cotton</span><span style="color: rgba(128, 0, 0, 1)">"</span>], size: { h: <span style="color: rgba(128, 0, 128, 1)">28</span>, w: <span style="color: rgba(128, 0, 128, 1)">35.5</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> } }
)</span></pre>
</div>
<p> 查看结果</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914105430881-1227664902.png"></p>
<p> </p>
<p> 插入多份文档</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.inventory.insertMany([
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">journal</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">25</span>, tags: [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">blank</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">red</span><span style="color: rgba(128, 0, 0, 1)">"</span>], size: { h: <span style="color: rgba(128, 0, 128, 1)">14</span>, w: <span style="color: rgba(128, 0, 128, 1)">21</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> } },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mat</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">85</span>, tags: [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">gray</span><span style="color: rgba(128, 0, 0, 1)">"</span>], size: { h: <span style="color: rgba(128, 0, 128, 1)">27.9</span>, w: <span style="color: rgba(128, 0, 128, 1)">35.5</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> } },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mousepad</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">25</span>, tags: [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">gel</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">blue</span><span style="color: rgba(128, 0, 0, 1)">"</span>], size: { h: <span style="color: rgba(128, 0, 128, 1)">19</span>, w: <span style="color: rgba(128, 0, 128, 1)">22.85</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> } }
])</span></pre>
</div>
<p> <span class="reference internal"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.insert()插入一份或者多份文档</span></code></span></p>
<p> </p>
<p> 3.4) 查询文档</p>
<p> 准备数据</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.inventory.insertMany([
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">journal</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">25</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">14</span>, w: <span style="color: rgba(128, 0, 128, 1)">21</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">notebook</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">50</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">8.5</span>, w: <span style="color: rgba(128, 0, 128, 1)">11</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">in</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">paper</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">100</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">8.5</span>, w: <span style="color: rgba(128, 0, 128, 1)">11</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">in</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">planner</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">75</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">22.85</span>, w: <span style="color: rgba(128, 0, 128, 1)">30</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">postcard</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">45</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">10</span>, w: <span style="color: rgba(128, 0, 128, 1)">15.25</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> }
]);</span></pre>
</div>
<p> </p>
<p> a) 查询所有数据</p>
<div class="cnblogs_code">
<pre>db.inventory.find( {} )</pre>
</div>
<p> 相当于sql</p>
<div class="cnblogs_code">
<pre>SELECT * FROM inventory</pre>
</div>
<p> </p>
<p> </p>
<p> b) 精确的等值查询</p>
<p> 精确的等值条件可以使用{<field1>: <value1>, ... }</p>
<div class="cnblogs_code">
<pre>db.inventory.find( { status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D</span><span style="color: rgba(128, 0, 0, 1)">"</span> } )</pre>
</div>
<p> 相当于SQL</p>
<div class="cnblogs_code">
<pre>SELECT * FROM inventory WHERE status = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p> </p>
<p> 查询过滤器, 即查询条件的写法形式, 等值形式, <field>:<value>, 条件查询里的操作符形式 <field>: {<operator>: <value>}</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914112026962-1589706903.png"></p>
<p> </p>
<p> </p>
<p> c)使用操作符进行条件查询</p>
<p> 条件查询操作符形式: <span class="p">{ <span class="o"><<span class="nx">field1<span class="o">>: <span class="p">{ <span class="o"><<span class="nx">operator1<span class="o">>: <span class="o"><<span class="nx">value1<span class="o">> <span class="p">}, <span class="p">... <span class="p">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<div class="cnblogs_code">
<pre>db.inventory.find( { status: { $<span style="color: rgba(0, 0, 255, 1)">in</span>: [ <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D</span><span style="color: rgba(128, 0, 0, 1)">"</span> ] } } )</pre>
</div>
<p> 相当于SQL</p>
<div class="cnblogs_code">
<pre>SELECT * FROM inventory WHERE status <span style="color: rgba(0, 0, 255, 1)">in</span> (<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D</span><span style="color: rgba(128, 0, 0, 1)">"</span>)</pre>
</div>
<p> </p>
<p> </p>
<p> d) 精准 AND 条件 查询</p>
<p> 查询inventory集合中status="A" 而且 qty<30的文档:</p>
<div class="cnblogs_code">
<pre>db.inventory.find( { status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: { $lt: <span style="color: rgba(128, 0, 128, 1)">30</span> } } )</pre>
</div>
<p> 相当于SQL</p>
<div class="cnblogs_code">
<pre>SELECT * FROM inventory WHERE status = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span> AND qty < <span style="color: rgba(128, 0, 128, 1)">30</span></pre>
</div>
<p> </p>
<p> </p>
<p> e)精准 OR 条件 查询</p>
<p> {<span style="color: rgba(255, 0, 0, 1)">$or: [ </span> {<field>:<value>, <field>:{<operator>: <value>}} <span style="color: rgba(255, 0, 0, 1)"> ] </span> }</p>
<p> 查询inventory中status="A" 或者 qty<30的文档</p>
<div class="cnblogs_code">
<pre>db.inventory.find( { $or: [ { status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, { qty: { $lt: <span style="color: rgba(128, 0, 128, 1)">30</span> } } ] } )</pre>
</div>
<p> 相当于SQL</p>
<div class="cnblogs_code">
<pre>SELECT * FROM inventory WHERE status = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span> OR qty < <span style="color: rgba(128, 0, 128, 1)">30</span></pre>
</div>
<p> </p>
<p> </p>
<p> f) AND , OR 混合查询</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.inventory.find( {
status: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
$or: [ { qty: { $lt: </span><span style="color: rgba(128, 0, 128, 1)">30</span> } }, { item: /^p/<span style="color: rgba(0, 0, 0, 1)"> } ]
} )</span></pre>
</div>
<p> 相当于SQL</p>
<div class="cnblogs_code">
<pre>SELECT * FROM inventory WHERE status = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span> AND ( qty < <span style="color: rgba(128, 0, 128, 1)">30</span> OR item LIKE <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">p%</span><span style="color: rgba(128, 0, 0, 1)">"</span>)</pre>
</div>
<p> </p>
<p> 一些常用的操作符</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914111609423-1459134832.png"></p>
<p> </p>
<p> <img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914111656579-372127511.png"></p>
<p> </p>
<p> g) 投影, 指定返回值</p>
<div class="cnblogs_code">
<pre>db.inventory.find( { status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, { item: <span style="color: rgba(128, 0, 128, 1)">1</span>, status: <span style="color: rgba(128, 0, 128, 1)">1</span> } )</pre>
</div>
<p> 相当于SQL:</p>
<div class="cnblogs_code">
<pre>SELECT _id, item, status <span style="color: rgba(0, 0, 255, 1)">from</span> inventory WHERE status = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p> </p>
<p> </p>
<p> 3.5)更新修改文档</p>
<p> 准备数据</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.inventory.insertMany( [
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">canvas</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">100</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">28</span>, w: <span style="color: rgba(128, 0, 128, 1)">35.5</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">journal</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">25</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">14</span>, w: <span style="color: rgba(128, 0, 128, 1)">21</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mat</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">85</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">27.9</span>, w: <span style="color: rgba(128, 0, 128, 1)">35.5</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mousepad</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">25</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">19</span>, w: <span style="color: rgba(128, 0, 128, 1)">22.85</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">P</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">notebook</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">50</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">8.5</span>, w: <span style="color: rgba(128, 0, 128, 1)">11</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">in</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">P</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">paper</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">100</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">8.5</span>, w: <span style="color: rgba(128, 0, 128, 1)">11</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">in</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">planner</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">75</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">22.85</span>, w: <span style="color: rgba(128, 0, 128, 1)">30</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">postcard</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">45</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">10</span>, w: <span style="color: rgba(128, 0, 128, 1)">15.25</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sketchbook</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">80</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">14</span>, w: <span style="color: rgba(128, 0, 128, 1)">21</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sketch pad</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">95</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">22.85</span>, w: <span style="color: rgba(128, 0, 128, 1)">30.5</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> }
] );</span></pre>
</div>
<p> </p>
<p> a) 在一个集合里更新文档</p>
<p> <code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.update()</span></code></p>
<p><span class="pre"> <code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.findAndModify()</span></code></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span><update <span style="color: rgba(0, 0, 255, 1)">operator</span>>: { <field1>: <value1><span style="color: rgba(0, 0, 0, 1)">, ... },
</span><update <span style="color: rgba(0, 0, 255, 1)">operator</span>>: { <field2>: <value2><span style="color: rgba(0, 0, 0, 1)">, ... },
...
}</span></pre>
</div>
<p> </p>
<p> 更新文档的常用操作符</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914131703638-210250821.png"></p>
<p> </p>
<p> 将item属性为paper的文档 中的"com.uom"属性设置为"cm", "status"属性设置为"P", 添加lastModified属性的字段, 并设置为$currentDate当前时间.</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.inventory.updateOne(
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">paper</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{
$</span><span style="color: rgba(0, 0, 255, 1)">set</span>: { <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">size.uom</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span>, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">P</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
$currentDate: { lastModified: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)"> }
}
)</span></pre>
</div>
<p> </p>
<p> 修改的结果为:</p>
<p> <img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914132853578-967414115.png"></p>
<p> </p>
<p> b) 在一个集合里修改多份文档</p>
<p> 将所有qty<50的文档, 修改对应值, 增加修改时间字段</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.inventory.updateMany(
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">qty</span><span style="color: rgba(128, 0, 0, 1)">"</span>: { $lt: <span style="color: rgba(128, 0, 128, 1)">50</span><span style="color: rgba(0, 0, 0, 1)"> } },
{
$</span><span style="color: rgba(0, 0, 255, 1)">set</span>: { <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">size.uom</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">in</span><span style="color: rgba(128, 0, 0, 1)">"</span>, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">P</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
$currentDate: { lastModified: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)"> }
}
)</span></pre>
</div>
<p> </p>
<p> c) 替换文档</p>
<p> 将item为paper的文档, 替换成指定文档.</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.inventory.replaceOne(
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">paper</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">paper</span><span style="color: rgba(128, 0, 0, 1)">"</span>, instock: [ { warehouse: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">60</span> }, { warehouse: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">B</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">40</span><span style="color: rgba(0, 0, 0, 1)"> } ] }
)</span></pre>
</div>
<p> </p>
<p> 修改之前:</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914133815770-409043491.png"></p>
<p> </p>
<p> 修改之后:</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914133908396-748213074.png"></p>
<p> </p>
<p> d)修改字段名:</p>
<p> <span class="p">{<span class="nx">$rename<span class="o">: <span class="p">{ <span class="o"><<span class="nx">field1<span class="o">>: <span class="o"><<span class="nx">newName1<span class="o">><span class="p">, <span class="o"><<span class="nx">field2<span class="o">>: <span class="o"><<span class="nx">newName2<span class="o">><span class="p">, <span class="p">... <span class="p">} <span class="p">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p> </p>
<p><span class="p"> 将item为canvas的文档中的"status"属性名 改为 "newstatus"<br></span></p>
<div class="cnblogs_code">
<pre> db.inventory.update({item:"canvas"},{$rename:{"status":"newstatus"}}) </pre>
</div>
<p> 修改结果为:</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914134647861-163379111.png"></p>
<p> </p>
<p> 3.6) 删除文档</p>
<p> 清空之前的数据: db.inventory.remove({})</p>
<p> 准备数据:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.inventory.insertMany( [
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">journal</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">25</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">14</span>, w: <span style="color: rgba(128, 0, 128, 1)">21</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">notebook</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">50</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">8.5</span>, w: <span style="color: rgba(128, 0, 128, 1)">11</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">in</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">P</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">paper</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">100</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">8.5</span>, w: <span style="color: rgba(128, 0, 128, 1)">11</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">in</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">planner</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">75</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">22.85</span>, w: <span style="color: rgba(128, 0, 128, 1)">30</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">postcard</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">45</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">10</span>, w: <span style="color: rgba(128, 0, 128, 1)">15.25</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
] );</span></pre>
</div>
<p> </p>
<p> a) 删除匹配的多份文档中的第一份文档</p>
<div class="cnblogs_code">
<pre>db.inventory.deleteOne({status:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span>})</pre>
</div>
<p> </p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914141735605-325346467.png"></p>
<p> </p>
<p> b) 删除匹配的多份文档</p>
<div class="cnblogs_code">
<pre>db.inventory.deleteMany({status:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D</span><span style="color: rgba(128, 0, 0, 1)">"</span>})</pre>
</div>
<p> </p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914142819308-606189648.png"></p>
<p> </p>
<p> c) 删除所有</p>
<div class="cnblogs_code">
<pre>db.inventory.deleteMany({})</pre>
</div>
<p> </p>
<p> 3.7) 批量写</p>
<p> db.collection.bulkWrite()提供批量插入,更新,删除的操作.MongoDb的批量插入也可以通过db.collection.insertMany()方法.</p>
<p> bulk wirte操作可以是有序的(ordered), 也可以是无序的(unordered).</p>
<p> 有序执行一系列的操作, MongoDB将会串行执行. 一旦发生一个操作出错, MongoDB将会立即返回.</p>
<p> 无序执行一系列的操作, MongoDB可以并行执行,但行为不能被保证. 如果出错, MongoDB将会继续执行.</p>
<p> 在分片集合中执行一批有序操作, 将会比无序操作更慢, 因为有序操作需要串行等待执行.</p>
<p> </p>
<p> 准备数据:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.inventory.insertMany([
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">char</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Brisbane</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">class</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">monk</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">lvl</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)"> },
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">2</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">char</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Eldon</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">class</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">alchemist</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">lvl</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)"> },
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">3</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">char</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Meldane</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">class</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ranger</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">lvl</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)"> }
]);</span></pre>
</div>
<p> </p>
<p> 将一系列操作批量执行 :</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.characters.bulkWrite(
[
{ <strong>insertOne</strong> :
{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">document</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> :
{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">4</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">char</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Dithras</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">class</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">barbarian</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">lvl</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">
}
}
},
{ <strong>insertOne</strong> :
{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">document</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> :
{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">5</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">char</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Taeln</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">class</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fighter</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">lvl</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">
}
}
},
{ <strong>updateOne</strong> :
{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">filter</span><span style="color: rgba(128, 0, 0, 1)">"</span> : { <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">char</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Eldon</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">update</span><span style="color: rgba(128, 0, 0, 1)">"</span> : { $<span style="color: rgba(0, 0, 255, 1)">set</span> : { <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">status</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Critical Injury</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> } }
}
},
{ <strong>deleteOne</strong> :
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">filter</span><span style="color: rgba(128, 0, 0, 1)">"</span> : { <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">char</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Brisbane</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">} }
},
{ <strong>replaceOne</strong> :
{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">filter</span><span style="color: rgba(128, 0, 0, 1)">"</span> : { <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">char</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Meldane</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">replacement</span><span style="color: rgba(128, 0, 0, 1)">"</span> : { <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">char</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Tanys</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">class</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">oracle</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">lvl</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)"> }
}
}
]
);</span></pre>
</div>
<p> </p>
<p> 返回结果为:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">acknowledged</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">deletedCount</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">insertedCount</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">matchedCount</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">upsertedCount</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">insertedIds</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> : {
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">0</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">1</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">
},
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">upsertedIds</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> : {
}
}</span></pre>
</div>
<p> </p>
<p> 3.7)在配置复制集时的读隔离级别</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1">Read Concern <code class="docutils literal"><span class="pre">"local"</span></code><span class="reference internal"><code class="docutils literal"><span class="pre"> 读取本地</span></code></span></li>
<li class="toctree-l1">Read Concern <code class="docutils literal"><span class="pre">"available"</span></code><span class="reference internal"><code class="docutils literal"><span class="pre"> 读取可用的复制集</span></code></span></li>
<li class="toctree-l1">Read Concern <code class="docutils literal"><span class="pre">"majority"</span></code><span class="reference internal"><code class="docutils literal"><span class="pre"> 读取主复制集</span></code></span></li>
<li class="toctree-l1">Read Concern <code class="docutils literal"><span class="pre">"linearizable"</span></code></li>
<li class="toctree-l1">Read Concern <code class="docutils literal"><span class="pre">"snapshot"</span></code></li>
</ul>
</div>
<p> </p>
<p> </p>
<p><strong>四丶聚合操作</strong></p>
<p> 聚合操作处理多条数据记录和返回计算结果</p>
<p> </p>
<p> 1) 聚合pipeline</p>
<p> 准备数据:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.inventory.insertMany( [
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">canvas</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">100</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">28</span>, w: <span style="color: rgba(128, 0, 128, 1)">35.5</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">journal</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">25</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">14</span>, w: <span style="color: rgba(128, 0, 128, 1)">21</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mat</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">85</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">27.9</span>, w: <span style="color: rgba(128, 0, 128, 1)">35.5</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mousepad</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">25</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">19</span>, w: <span style="color: rgba(128, 0, 128, 1)">22.85</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">P</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">notebook</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">50</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">8.5</span>, w: <span style="color: rgba(128, 0, 128, 1)">11</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">in</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">P</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">paper</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">100</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">8.5</span>, w: <span style="color: rgba(128, 0, 128, 1)">11</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">in</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">planner</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">75</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">22.85</span>, w: <span style="color: rgba(128, 0, 128, 1)">30</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">postcard</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">45</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">10</span>, w: <span style="color: rgba(128, 0, 128, 1)">15.25</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sketchbook</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">80</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">14</span>, w: <span style="color: rgba(128, 0, 128, 1)">21</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
{ item: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sketch pad</span><span style="color: rgba(128, 0, 0, 1)">"</span>, qty: <span style="color: rgba(128, 0, 128, 1)">95</span>, size: { h: <span style="color: rgba(128, 0, 128, 1)">22.85</span>, w: <span style="color: rgba(128, 0, 128, 1)">30.5</span>, uom: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cm</span><span style="color: rgba(128, 0, 0, 1)">"</span> }, status: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> }
] );</span></pre>
</div>
<p> </p>
<p> 使用格式为</p>
<div class="cnblogs_code">
<pre>db.collection.aggregate( [ { <stage> }, ... ] )</pre>
</div>
<p> </p>
<p> a)使用案例1</p>
<p> 查询所有qty属性值小于100的文档, 并返回所有"qty"的值</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.inventory.aggregate([
{$match:{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">qty</span><span style="color: rgba(128, 0, 0, 1)">"</span>:{<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">$lt</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 128, 1)">100</span><span style="color: rgba(0, 0, 0, 1)">} }},
{$project: {</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">qty</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">} }
]);</span></pre>
</div>
<p> $match: 为匹配stage, 值可以是正常的查询语句</p>
<p> $project: 为投影stage, 值是指定需要返回的属性</p>
<p> 输出结果为:</p>
<p> <img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914181043671-297045163.png"></p>
<p> </p>
<p> b) 使用案例2</p>
<p> 对所有"qty"值小于100的文档, 以"status"分组, 并计算"qty"的总数</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.inventory.aggregate([
{$match:{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">qty</span><span style="color: rgba(128, 0, 0, 1)">"</span>:{<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">$lt</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 128, 1)">100</span><span style="color: rgba(0, 0, 0, 1)">} }},
{$group: {_id:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">$status</span><span style="color: rgba(128, 0, 0, 1)">"</span>, total: {<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">$sum</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">$qty</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">} }}
]);</span></pre>
</div>
<p> </p>
<p> 结果为:</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914182247117-2118682592.png"></p>
<p> </p>
<p> 一些常用聚合stage:</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914182355635-1873873330.png"></p>
<p> </p>
<p> </p>
<p> 2) map-reduce</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914182612156-64744607.png"></p>
<p> </p>
<p> </p>
<p><strong>五丶索引</strong></p>
<p> mongo的索引和其他数据库的索引类似,用于加快查询.</p>
<p><img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914184114703-1528260557.png"></p>
<p> </p>
<p> 1. 创建索引</p>
<div class="cnblogs_code">
<pre>db.collection.createIndex( <key and index type specification>, <options> )</pre>
</div>
<p> 举例,</p>
<div class="cnblogs_code">
<pre>db.mycol.createIndex( { name: -<span style="color: rgba(128, 0, 128, 1)">1</span> } )</pre>
</div>
<p> 如果集合mycol中的name字段没有一样的索引定义, 将创建该索引</p>
<p> </p>
<p> 2. 索引名字</p>
<p> 使用<code class="docutils literal"><span class="pre">{ <span class="pre">item <span class="pre">: <span class="pre">1, <span class="pre">quantity: <span class="pre">-1 <span class="pre">}语句创建索引, 默认索引名字为<code class="docutils literal"><span class="pre">item_1_quantity_-1</span></code></span></span></span></span></span></span></span></code></p>
<p> 使用如下语句, 可以指定索引名字</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.products.createIndex(
{ item: </span><span style="color: rgba(128, 0, 128, 1)">1</span>, quantity: -<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> } ,
{ name: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">query for inventory</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> }
)</span></pre>
</div>
<p> </p>
<p> 3. 查看索引</p>
<div class="cnblogs_code">
<pre>db.mycol.getIndexes()</pre>
</div>
<p> </p>
<p> 4. 删除索引</p>
<p> 删除在属性"tx-id"上的索引</p>
<div class="cnblogs_code">
<pre>db.accounts.dropIndex( { <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">tax-id</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 128, 1)">1</span> } )</pre>
</div>
<p> 删除集合的所有索引</p>
<div class="cnblogs_code">
<pre>db.mycol.dropIndexes()</pre>
</div>
<p> </p>
<p> 5. 索引类型</p>
<p> </p>
<p> </p>
<p><strong> 六丶Mongodb界面工具</strong></p>
<p> 本人使用nosqlbooster , 因为它跨平台</p>
<p> <img src="https://img2018.cnblogs.com/blog/1435418/201909/1435418-20190914190001399-1560458225.png"></p>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
人生没有彩排,每一天都是现场直播<br><br>
来源:https://www.cnblogs.com/timfruit/p/11516381.html
頁:
[1]