共和仔 發表於 2019-7-16 08:32:00

快速掌握mongoDB(一)——mongoDB安装部署和常用shell命令

<h2>1.mongoDB简介</h2>
<p>  mongoDB 是由C++语言编写的,是一种分布式的面向文档存储的开源nosql数据库。nosql是Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。</p>
<p>  mongoDB是无模式的文档数据库,在关系型数据库中,数据表的每一行都拥有一样的字段,字段的名字和数据类型在创建table的时候就基本确定了,如student表的每一行都有学生编号、学生姓名、年龄等字段;而在mongoDB中,存储数据的格式类似于Json(格式为Bson),每一个document的字段的名字和数据类型可以完全不同,如在一个collection下,第一个document可以存储学生信息(学生编号、姓名、年龄、性别等),第二个document可以存储班级信息(班级编号,班级名等)。正是因为无模式的特点,让我们可以无需多余操作就能完成数据的横向扩展。下表是mongoDB和传统数据库术语的对应关系。</p>
<table class="reference">
<tbody>
<tr><th>SQL术语</th><th>MongoDB</th><th>解释/说明</th></tr>
<tr>
<td>database</td>
<td>database</td>
<td>数据库</td>
</tr>
<tr>
<td>table</td>
<td>collection</td>
<td>数据库表/集合</td>
</tr>
<tr>
<td>row</td>
<td>document</td>
<td>数据记录行/文档</td>
</tr>
<tr>
<td>column</td>
<td>field</td>
<td>数据字段/域</td>
</tr>
<tr>
<td>index</td>
<td>index</td>
<td>索引</td>
</tr>
<tr>
<td>join</td>
<td>&nbsp;$lookup</td>
<td>表连接</td>
</tr>
<tr>
<td>primary key</td>
<td>primary key</td>
<td>主键,MongoDB自动将_id字段设置为主键</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h2><span style="font-size: 1.5em">2. mongoDB安装</span>&nbsp;</h2>
<h3>1.安装mongoDB</h3>
<p>  mongoDB的安装步骤十分简单,下载地址:https://www.mongodb.com/download-center#community。如果我们想在Windows上安装mongoDB直接下载msi文件,双击安装即可。如果要将mongoDB安装在Linux系统上,步骤如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">###第1步 下载解压mongdb</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">下载解压二进制包,解压即安装</span>
  cd /usr/local/src/<span style="color: rgba(0, 0, 0, 1)">
  curl </span>-O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.9<span style="color: rgba(0, 0, 0, 1)">.tgz
  tar </span>-zxvf mongodb-linux-x86_64-4.0.9<span style="color: rgba(0, 0, 0, 1)">.tgz
  mv mongodb</span>-linux-x86_64-4.0.9 /usr/local/<span style="color: rgba(0, 0, 0, 1)">mongodb

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">###第2步 添加配置文件</span>
  vim /usr/local/mongodb/bin/<span style="color: rgba(0, 0, 0, 1)">mongodb.conf
<span style="color: rgba(0, 0, 255, 1)"><strong>配置文件内容如下:</strong></span>
<em><span style="color: rgba(0, 0, 255, 1)">systemLog:
destination: file
logAppend: </span></em></span><span style="color: rgba(0, 0, 255, 1)"><em>true
path:</em> /usr/local/mongodb/logs/mongodb.log
storage:
dbPath: /usr/local/mongodb/data
journal:
    enabled: true
processManagement:
fork: true
net:
port: 27017
bindIp: 0.0.0.0</span>

<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">配置文件中指定的dbpath和log要自己添加,不然会报错,执行命令 </span>
  mkdir -p /usr/local/mongodb/data; mkdir -p /usr/local/mongodb/logs/;cd /usr/local/mongodb/logs/<span style="color: rgba(0, 0, 0, 1)">; touch mongodb.log

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">###第3步 加载配置文件运行</span>
  /usr/local/mongodb/bin/mongod <span style="color: rgba(0, 128, 128, 1)">-f</span> /usr/local/mongodb/bin/<span style="color: rgba(0, 0, 0, 1)">mongodb.conf

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">###第4步 添加环境变量,用于可以在任意目录下执行mongo命令 </span>
  vim ~/.bash_profile <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">修改当前用户下的环境变量 PATH=$PATH:$HOME/bin:/usr/local/mongodb/bin</span>
  source ~/.bash_profile</pre>
</div>
<p>&nbsp; 安装完成后,在任意目录下使用命令&nbsp;<span class="cnblogs_code">mongo 192.168.70.133:27017</span>&nbsp;(mongo命令会默认启动127.0.0.1:27017)启动mongodb,mongoDB使用的是javascript&nbsp;shell,我们简单测试一下,如果出现下边的界面表示安装成功了</p>
<p><img style="display: block; margin-left: auto; margin-right: auto" src="https://img2018.cnblogs.com/blog/1007918/201905/1007918-20190525151151628-164071995.png" alt=""> </p>
<p>&nbsp;  这里简单使用一下mongoDB的shell来添加、删除数据库和collection:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto" src="https://img2018.cnblogs.com/blog/1007918/201906/1007918-20190616150530057-737696353.png" alt=""></p>
<h3>2.安装Robomongo并连接数据库</h3>
<p>  mongoDB的GUI有MongoDB Compass、studio 3T等,这里使用的是Robomongo,下载地址:https://robomongo.org/,下载完成后一直Next安装即可,连接mongoDB效果如下,Robomongo是傻瓜式的用法,可以通过客户端添加collection,document,执行shell等,具体使用方法就不再详细介绍了。</p>
<p style="text-align: center">·  <img style="border: 2px solid rgba(0, 0, 255, 1)" src="https://img2018.cnblogs.com/blog/1007918/201905/1007918-20190525153533351-367984082.png" alt=""></p>
<p>  我们也可以通过shell脚本连接数据库,在Robomongo执行shell命令如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">连接远程数据库</span>
  <span style="color: rgba(0, 0, 255, 1)">var</span> mongo=<span style="color: rgba(0, 0, 255, 1)">new</span> Mongo(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">192.168.70.133:27017</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">找到数据库</span>
  <span style="color: rgba(0, 0, 255, 1)">var</span> db=mongo.getDB(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">myDB</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">找到collecttion</span>
  <span style="color: rgba(0, 0, 255, 1)">var</span> collection=db.getCollection(<span style="color: rgba(128, 0, 0, 1)">"userinfo</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询colletion中所有数据</span>
  <span style="color: rgba(0, 0, 255, 1)">var</span> list=<span style="color: rgba(0, 0, 0, 1)">collection.find().toArray();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">json形式打印结果</span>
  printjson(list);</pre>
</div>
<h2>3 mongoDB的shell</h2>
<p>  我们已经知道mongoDB是面向文档的nosql数据库,因为其无模式的特点,造成它的操作要比关系型数据库复杂一些,这里简单介绍一下mongoDB的CRUD操作。注意:从3.2版本开始,mongoDB添加了一些xxxOne()和xxxMany()方法,我们尽量使用这些新的方法。</p>
<h3>1 添加(insert)</h3>
<p>   添加数据的指令是insert,使用方法如下:</p>
<p> </p>
<p>&nbsp;  <img style="display: block; margin-left: auto; margin-right: auto" src="https://img2018.cnblogs.com/blog/1007918/201906/1007918-20190613211708734-1714194013.png" alt=""></p>
<p>  insert方法的参数也可以是数组,用于批量添加数据,如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.userinfos.insert([
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">1</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">23</span><span style="color: rgba(0, 0, 0, 1)">},
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">2</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">24</span><span style="color: rgba(0, 0, 0, 1)">}
]);</span></pre>
</div>
<p>  从3.2版本,mongoDB添加了insertOne和insertMany方法,分别用于单条插入和批量插入,用法很简单,如下:</p>
<div class="cnblogs_code">
<pre><strong><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">insertOne用于单条添加</span></strong>
  <span style="color: rgba(0, 0, 0, 1)">db.userinfos.insertOne(
     {_id:</span><span style="color: rgba(128, 0, 128, 1)">1</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">23</span><span style="color: rgba(0, 0, 0, 1)">}
  );

</span><strong><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">insertMany用于批量添加</span></strong>
  <span style="color: rgba(0, 0, 0, 1)"> db.userinfos.insertMany([
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">1</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">23</span><span style="color: rgba(0, 0, 0, 1)">},
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">2</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">24</span><span style="color: rgba(0, 0, 0, 1)">}
  ]);</span></pre>
</div>
<h3>2 查询(find)</h3>
<p>  mongoDB查询使用find函数,语法如下:</p>
<p>&nbsp; <img style="display: block; margin-left: auto; margin-right: auto" src="https://img2018.cnblogs.com/blog/1007918/201906/1007918-20190613220902900-1323060044.png" alt=""></p>
<p>  mongoDB使用find查询时,默认会返回主键_id,如果不想返回主键的话设置_id=0即可。mongoDB的查询语法是比较简单的,但是因为其无模式的特点,且field的值可以是对象和数组,造成mongoDB的运算符要比传统的关系型数据库多很多,如运算符$exists可用于查询field是否存在、$type用于判断filed的类型等等,这里汇总了一些常用的查询相关的运算符,有兴趣的小伙伴可以测试一下:</p>
<table border="0">
<tbody>
<tr>
<td colspan="5">
<p><strong>测试数据:</strong></p>
<div class="cnblogs_code">
<pre><strong><span style="color: rgba(0, 0, 0, 1)">db.userinfos.insertMany([
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">1</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">23</span>,level:<span style="color: rgba(128, 0, 128, 1)">10</span>, ename: { firstname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">san</span><span style="color: rgba(128, 0, 0, 1)">"</span>, lastname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">zhang</span><span style="color: rgba(128, 0, 0, 1)">"</span>}, roles: [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">vip</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)">gen</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> ]},
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">2</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">24</span>,level:<span style="color: rgba(128, 0, 128, 1)">20</span>, ename: { firstname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">si</span><span style="color: rgba(128, 0, 0, 1)">"</span>, lastname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(128, 0, 0, 1)">"</span>}, roles:[ <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">vip</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> ]},
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">3</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">25</span>,level:<span style="color: rgba(128, 0, 128, 1)">30</span>, ename: { firstname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">wu</span><span style="color: rgba(128, 0, 0, 1)">"</span>, lastname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">wang</span><span style="color: rgba(128, 0, 0, 1)">"</span>}, roles: [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">gen</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)">vip</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> ]},
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">4</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">26</span>,level:<span style="color: rgba(128, 0, 128, 1)">40</span>, ename: { firstname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">liu</span><span style="color: rgba(128, 0, 0, 1)">"</span>, lastname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">zhao</span><span style="color: rgba(128, 0, 0, 1)">"</span>}, roles: [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">gen</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">] },
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">5</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">27</span>, ename: { firstname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">qi</span><span style="color: rgba(128, 0, 0, 1)">"</span>, lastname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">tian</span><span style="color: rgba(128, 0, 0, 1)">"</span>}, address:<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)">'</span><span style="color: rgba(0, 0, 0, 1)"> },
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">6</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">28</span>,roles:[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">gen</span><span style="color: rgba(128, 0, 0, 1)">"</span>], address:<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)">'</span><span style="color: rgba(0, 0, 0, 1)"> }
]);</span></strong></pre>
</div>
</td>
</tr>
<tr>
<td><strong><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;类别</span></strong></td>
<td><strong><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;运算符</span></strong></td>
<td><strong><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;说明</span></strong></td>
<td><strong><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;实例</span></strong></td>
<td><strong><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;执行结果</span></strong></td>
</tr>
<tr>
<td rowspan="6">
<p><strong><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">比较运算符&nbsp; &nbsp;</span></strong></p>
</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$gt($gte)</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">大于(大于等于)</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.userinfos.find(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { age:{$gt:25}},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { name:1 }</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>







































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">查找age&gt;25的文档的name</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{ "_id" : 4, "name" : "赵六" },</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    { "_id" : 5, "name" : "田七" }]</span></p>







































</td>







































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$lt($lte)</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;小于(小于等于)</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;db.userinfos.find(</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { age:{$lt:25}},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { name:1 }</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>







































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">查找age&lt;25的文档的name</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:&nbsp;</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [ { "_id" : 1, "name" : "张三" },</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   { "_id" : 2, "name" : "李四" } ]</span></p>







































</td>







































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$eq</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;等于</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;db.userinfos.find(</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { age:{$eq:25}},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { name:1 }</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>







































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">查询age=25的文档的name</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [ { "_id" : 3, "name" : "王五" } ]</span></p>







































</td>







































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$ne</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;不等于</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.userinfos.find(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { age:{$ne:25}},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { name:1 }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>







































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;查询age!=25的文档的name</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{"_id" : 1,"name" : "张三"},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">          {"_id" : 2,"name" : "李四"},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">          {"_id" : 4,"name" : "赵六"},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">          {"_id" : 5,"name" : "田七"}]</span></p>







































</td>







































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$in</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;包含</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;db.userinfos.find(</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { age:{$in:}},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { name:1 }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>







































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">查询age在中的文档的name</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  &nbsp;[ { "_id" : 2, "name" : "李四" }, </span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { "_id" : 3, "name" : "王五" } ]</span></p>







































</td>







































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$nin</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;不包含</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.userinfos.find(</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { age:{$nin:}},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { name:1 }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>







































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">查询age不在中的文档的name</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{"_id" : 1,"name" : "张三"},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   {"_id" : 4,"name" : "赵六"},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   {"_id" : 5,"name" : "田七"}]</span></p>







































</td>







































</tr>
<tr>
<td rowspan="4"><strong><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">逻辑运算符</span></strong></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$and</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;与</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.userinfos.find(</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {$and: [</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {name:{$eq:'张三'}},</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {age:{$eq:23}}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  ]},</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:1}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span></p>






































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">查询name='张三'且age=23的文档&nbsp;</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [ { "_id" : 1, "name" : "张三" } ]</span></p>






































</td>







































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$not&nbsp;</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">非</span></p>






































</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;db.userinfos.find(</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {age:{$not:{$in:}}},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:1}</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>






































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">查询age不在中的文档</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [ { "_id" : 4, "name" : "赵六" }, </span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { "_id" : 5, "name" : "田七" } ]</span></p>






































</td>







































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$or&nbsp;</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;或</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span></p>






































</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;db.userinfos.find(</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {$or: [</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {name:{$eq:'张三'}},</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {age:{$eq:24}}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  ]},</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:1}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>






































</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">查询name='张三'或者age=24的文档&nbsp;</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [ { "_id" : 1, "name" : "张三" },</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { "_id" : 2, "name" : "李四" } ]</span></p>






































</td>







































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$nor&nbsp;</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">或的取反</span></p>






































</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;db.userinfos.find(</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {$nor: [</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {name:{$eq:'张三'}},</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {age:{$eq:24}}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  ]},</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:1}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>






































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;上边栗子的取反操作</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [ {"_id" : 3,"name" : "王五"},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">           {"_id" : 4,"name" : "赵六"},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">           {"_id" : 5,"name" : "田七"} ]</span></p>






































</td>







































</tr>
<tr>
<td rowspan="5"><strong><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;评估运算符</span></strong></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$mod</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">取余</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.userinfos.find(</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {age:{$mod:}},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:1}</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>





































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">查询name%10=3的文档</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">[ { "_id" : 1, "name" : "张三" } ]</span></p>





































</td>





































</tr>
<tr>
<td rowspan="2"><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$regex</span><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span></td>
<td rowspan="2"><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">正则&nbsp;</span><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.userinfos.find(</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:{$regex:/^张/i}},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:1}</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>





































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">查询name以张开头的文档</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">[ { "_id" : 1, "name" : "张三" } ]</span></p>





































</td>





































</tr>
<tr>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.userinfos.find(</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:{$in:[/^张/,/四$/]}},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:1}</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>





































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">查询name以张开头或者以四结尾的文档</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">[ { "_id" : 1, "name" : "张三" }, </span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">{ "_id" : 2, "name" : "李四" } ]</span></p>





































</td>





































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$where</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">where过滤</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.userinfos.find(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {$where :function(){return this.name=='张三';}},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {name:1}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>





































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">查询名字为张三的记录</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [ { "_id" : 1, "name" : "张三" } ]</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">注意:where可以实现所有的过滤,但是效率不高。</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">这是因为where采用逐行判断而不使用索引</span></p>





































</td>





































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$expr</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;表达式过滤</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.userinfos.find(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { $expr:{$lt:["$age","$level"]}},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { name:1 }</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>





































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;查询age&lt;level的记录</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">[ { "_id" : 3, "name" : "王五" },</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> { "_id" : 4, "name" : "赵六" } ]</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span></p>





































</td>





































</tr>
<tr>
<td rowspan="2"><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"><strong>元素运算符&nbsp;</strong>&nbsp;</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$exists</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">field是否存在</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.userinfos.find(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { address:{$exists:true}},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { name:1 }</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>





































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">查询存在address字段的文档</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">[ { "_id" : 5, "name" : "田七" }, </span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">{ "_id" : 6, "name" : "周八" } ]</span></p>





































</td>





































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$type</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">field类型</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.userinfos.find(</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:{$type:'string'}},</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:1}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>





































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;查询name为string的文档</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  所有文档都匹配</span></p>





































</td>





































</tr>
<tr>
<td rowspan="3"><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"><strong>数组运算符</strong>&nbsp;&nbsp;&nbsp;</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$all</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;包含所有元素才匹配成功</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;db.userinfos.find(</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {roles:{$all:['vip','gen']}},</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:1}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>





































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">查询roles中包含vip和gen的文档</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;[ { "_id" : 1, "name" : "张三" }, </span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">{ "_id" : 3, "name" : "王五" } ]</span></p>





































</td>





































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$eleMatch</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;只要有一个元素符合就匹配成功</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;db.userinfos.find(</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {roles:{$elemMatch:{ $eq: 'vip', $ne: 'gen' }}},</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:1}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>





































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;查询roles中有元素等于vip,或有元素不等于gen的文档</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{"_id" : 1,"name" : "张三"},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">          {"_id" : 2,"name" : "李四"},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">          {"_id" : 3,"name" : "王五"}]</span></p>





































</td>





































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$size</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;元素个数相同的匹配成功</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;db.userinfos.find(</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {roles:{$size:2}},</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:1}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>





































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;查询roles中有两个元素的文档</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">[ { "_id" : 1, "name" : "张三" },</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> { "_id" : 3, "name" : "王五" } ]</span></p>





































</td>





































</tr>







































</tbody>







































</table>
<h3>3 修改(update)</h3>
<p>  mongoDB修改documen使用的命令是update,语法如下:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto" src="https://img2018.cnblogs.com/blog/1007918/201906/1007918-20190616114751086-971432921.png" alt=""></p>
<p>  mongoDB的update默认只修改一条document,如果想修改所有符合条件的documet的话,可以设置multi:true。upsert表示当没有符合过滤条件的文档时,就添加一条文档,并将修改的内容作为新增document的值。mongoDB的update功能比较丰富,如可以修改field的名字,删除field,以及对数组进行增删改。从3.2版本开始,mongoDB添加了updateOne()和updateMany()方法,用于修改单条或者多条数据,推荐使用新的方法,语法如下:</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将age&lt;25的记录的level修改为50,只修改一条。updateOne相当于update设置multi:false</span>
<span style="color: rgba(0, 0, 0, 1)">db.userinfos.updateOne(
   {age:{$lt:</span><span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">}},
   {$</span><span style="color: rgba(0, 0, 255, 1)">set</span>:{level:<span style="color: rgba(128, 0, 128, 1)">50</span><span style="color: rgba(0, 0, 0, 1)">}}
   )
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将age&lt;25的记录的level修改为50,所有符合条件的记录都修改。updateMany相当于update设置multi:true</span>
<span style="color: rgba(0, 0, 0, 1)">db.userinfos.updateMany(
   {age:{$lt:</span><span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">}},
   {$</span><span style="color: rgba(0, 0, 255, 1)">set</span>:{level:<span style="color: rgba(128, 0, 128, 1)">50</span><span style="color: rgba(0, 0, 0, 1)">}}
   )</span></pre>
</div>
<p>  这里汇总了mongoDB中关于update的相关运算符,有兴趣的小伙伴可以测试一下:</p>
<table border="0">
<tbody>
<tr>
<td colspan="5">
<p>&nbsp;<strong>测试数据:</strong></p>
<div class="cnblogs_code">
<pre><strong><span style="color: rgba(0, 0, 0, 1)">db.userinfos.insertMany([
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">1</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">23</span>,level:<span style="color: rgba(128, 0, 128, 1)">10</span>, ename: { firstname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">san</span><span style="color: rgba(128, 0, 0, 1)">"</span>, lastname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">zhang</span><span style="color: rgba(128, 0, 0, 1)">"</span>}, roles: [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">vip</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)">gen</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> ]},
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">2</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">24</span>,level:<span style="color: rgba(128, 0, 128, 1)">20</span>, ename: { firstname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">si</span><span style="color: rgba(128, 0, 0, 1)">"</span>, lastname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(128, 0, 0, 1)">"</span>}, roles:[ <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">vip</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> ]},
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">3</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">25</span>,level:<span style="color: rgba(128, 0, 128, 1)">30</span>, ename: { firstname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">wu</span><span style="color: rgba(128, 0, 0, 1)">"</span>, lastname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">wang</span><span style="color: rgba(128, 0, 0, 1)">"</span>}, roles: [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">gen</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)">vip</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> ]},
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">4</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">26</span>,level:<span style="color: rgba(128, 0, 128, 1)">40</span>, ename: { firstname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">liu</span><span style="color: rgba(128, 0, 0, 1)">"</span>, lastname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">zhao</span><span style="color: rgba(128, 0, 0, 1)">"</span>}, roles: [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">gen</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">] },
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">5</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">27</span>, ename: { firstname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">qi</span><span style="color: rgba(128, 0, 0, 1)">"</span>, lastname: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">tian</span><span style="color: rgba(128, 0, 0, 1)">"</span>}, address:<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)">'</span><span style="color: rgba(0, 0, 0, 1)"> },
   {_id:</span><span style="color: rgba(128, 0, 128, 1)">6</span>, name: <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)">"</span>, age: <span style="color: rgba(128, 0, 128, 1)">28</span>,roles:[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">gen</span><span style="color: rgba(128, 0, 0, 1)">"</span>], address:<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)">'</span><span style="color: rgba(0, 0, 0, 1)"> }
]);</span></strong></pre>
</div>
</td>
</tr>
<tr>
<td rowspan="8">&nbsp;<strong>值操作运算符</strong></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$currentDate</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">修改field值为当前时间,</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">如果field不存在则添加field</span></p>
</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> db.userinfos.update(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {name:'张三'},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {$currentDate:{</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    createtime:{$type:'timestamp'}}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   )</span></p>
















</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">将张三的createtime字段值修改为当前时间</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  格式为时间戳("createtime" : Timestamp(1560663270, 1))</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">补充:如果不设置$type,默认的格式为date</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  格式为date("createtime" : ISODate("2019-06-16T05:38:21.119Z"))</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  </span></p>
















</td>
















</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$set</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">修改值</span></p>
















</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> db.userinfos.update(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {name:'张三'},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {$set:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {level:20}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   )</span></p>
















</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;将张三的level修改为20。如果要修改的field不存在,不会添加新的field。</span></td>
















</tr>
<tr>
<td rowspan="2"><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$setOnInsert&nbsp;</span></td>
<td rowspan="2">
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">只有在新增document时进行赋值,</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">一定要设置upsert:true</span></p>
















<span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> db.userinfos.update(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {name:'张三'},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {$setOnInsert:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {level:30}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {upsert:true}</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   )</span></p>
















</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;因为已经有name=张三的document,所以不做任何操作</span></td>
















</tr>
<tr>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> db.userinfos.update(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {name:'吴九'},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {$setOnInsert:{level:30}},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {upsert:true}</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   )</span></p>
















</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;添加一个name=吴九的document,并设置level为30</span></td>
















</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$inc</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">自增</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> db.userinfos.update(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {name:'张三'},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {$inc:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {age:10}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   )</span></p>
















</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">张三的age自增10,age修改为23+10=33</span></td>
















</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$mul</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">自乘</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.userinfos.update(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:'张三'},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {$mul:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {age:2}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>
















</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">张三的age自乘2,age修改为23*2=46</span></td>
















</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$min</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">取小</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.userinfos.update(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:'张三'},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {$min:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {age:13}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>
















</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">张三的age取小值,因为23&gt;13,所以修改age为13。如果修改的值比23大,那么不做操作。</span></td>
















</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$max</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">取大</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.userinfos.update(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {name:'张三'},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  {$max:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {age:33}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>
















</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">张三的age取大值,因为23&lt;33,所以修改age为33。如果修改的值比23小,那么不做操作。</span></td>
















</tr>
<tr>
<td rowspan="2"><strong>字段操作运算符</strong>&nbsp;&nbsp;</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;">$rename</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;">&nbsp;修改filed的名字</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;">&nbsp;db.userinfos.update(</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;">     {name:'张三'},<br>     {$rename:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;">    {age:'年龄'}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;">  }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;">   )</span></p>
















</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;">&nbsp;将张三的age字段名改成年龄,值不变,年龄=23</span></td>
















</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;">$unset</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;">&nbsp;删除field</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;">&nbsp;db.userinfos.update(</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;">     {name:'张三'},<br>     {$unset:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;">    {level:''}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;">  }<br>   )</span></p>
















</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;">&nbsp;将张三的level字段删除</span></td>
















</tr>
















</tbody>
















</table>
<p>&nbsp;</p>
<h4>&nbsp;  数组相关的update运算符:</h4>
<table border="0">
<tbody>
<tr>
<td colspan="5">
<p><strong><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">测试数据:</span></strong></p>
<div class="cnblogs_code">
<pre><strong><span style="color: rgba(0, 0, 0, 1)">   db.students.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)">grades</span><span style="color: rgba(128, 0, 0, 1)">"</span> : [ <span style="color: rgba(128, 0, 128, 1)">85</span>, <span style="color: rgba(128, 0, 128, 1)">80</span>, <span style="color: rgba(128, 0, 128, 1)">80</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)">grades</span><span style="color: rgba(128, 0, 0, 1)">"</span> : [ <span style="color: rgba(128, 0, 128, 1)">88</span>, <span style="color: rgba(128, 0, 128, 1)">90</span>, <span style="color: rgba(128, 0, 128, 1)">92</span><span style="color: rgba(0, 0, 0, 1)"> ] }]
   )</span></strong></pre>
</div>
</td>
</tr>
<tr>
<td rowspan="8"><strong><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;数组运算符</span></strong></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">单个占位符</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.students.updateOne(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     { _id: 1, grades: 80 },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     { $set: { "grades.$" : 82 } }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>


































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">修改_id=1的文档graders中第一个值为80的元素,值改成82</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   [{ "_id" : 1, "grades" : [ 85, 82, 80 ] },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     { "_id" : 2, "grades" : [ 88, 90, 92 ] }]</span></p>


































</td>


































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$[]</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;所有元素占位符</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> db.students.updateOne(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     { _id: 1},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     { $set: { "grades.$[]" : 100 } }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>


































</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">修改_id=1的文档graders中所有元素,值改成100</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{ "_id" : 1, "grades" : [ 100, 100, 100 ] },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { "_id" : 2, "grades" : [ 88, 90, 92 ] }]</span></p>


































</td>


































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$[&lt;identifier&gt;]</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;符合arrayFilter过滤条件的元素占位符</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> db.students.updateOne(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     { _id: 2},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">      { $set: { "grades.$" : 100 } },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     { arrayFilters: [ { "element": { $gte: 90 } } ]}</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>


































</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">修改_id=2的文档graders中大于等于90的元素,值改成100</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{ "_id" : 1, "grades" : [&nbsp;&nbsp;85, 82, 80&nbsp; ] },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { "_id" : 2, "grades" : [ 88, 100, 100 ] }]</span></p>


































</td>


































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$push</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;添加元素</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.students.updateOne(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     { _id: 1 },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     { $push: { "grades" : 98 } }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>


































</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">在_id=1的文档graders中添加元素</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{ "_id" : 1, "grades" : [&nbsp;&nbsp;85, 80, 80 ,98 ] },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { "_id" : 2, "grades" : [ 88, 90, 92 ] }]</span></p>


































</td>


































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$addToSet</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;添加不存在的元素,如果元素已经存在则无操作</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;db.students.updateOne(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { _id: 1 },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { $addToSet: { "grades" : 100 } }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">在_id=1的文档graders中添加元素</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{ "_id" : 1, "grades" : [&nbsp;&nbsp;85, 80, 80 ,98,100 ] },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { "_id" : 2, "grades" : [ 88, 90, 92 ] }]</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">补充:如果添加的元素是85,因为85已经存在,所以不执行操作</span></p>


































</td>


































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$pop</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;弹出(移除)元素</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">db.students.updateOne(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     { _id: 1 },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     { $pop: { "grades" : 1 } }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">)</span></p>


































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;移除最后一个元素</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{ "_id" : 1, "grades" : [&nbsp;&nbsp;85, 80 ] },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { "_id" : 2, "grades" : [ 88, 90, 92 ] }]</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">补充:如果{ $pop: { "grades" : -1 } }表示从前边弹出,移除第一个元素</span></p>


































</td>


































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$pullAll</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">根据值移除数组中的元素</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> db.students.update(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {_id:2},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {$pullAll:{"grades":}}</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   )</span></p>


































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">移除_id=2的文档的graders中值为88,90的所有元素</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{ "_id" : 1, "grades" : [&nbsp;&nbsp;85, 80, 80&nbsp; ] },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { "_id" : 2, "grades" : [ 92 ] }]</span></p>


































</td>


































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$pull</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;移除符合条件的元素</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> db.students.update(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {_id:2},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {$pull:{"grades":{$gt:90}}}</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   )</span></p>


































</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">移除_id=2的文档的graders中大于90的所有元素</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{ "_id" : 1, "grades" : [&nbsp;&nbsp;85, 80, 80&nbsp; ] },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { "_id" : 2, "grades" : [ 88,90 ] }]</span></p>


































</td>


































</tr>
<tr>
<td rowspan="4">
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;<strong>&nbsp;数组批量添加</strong></span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"><strong>相关运算符</strong></span></p>




















</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$each</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;和$push,$addToSet配合使用,用于批量添加元素</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> db.students.update(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {_id:1},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {$push:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {grades:{$each:}}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  }</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   )</span></p>


































</td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">在_id=1的文档graders中添加元素</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{ "_id" : 1, "grades" : [&nbsp;&nbsp;85, 80, 80 ,99,100 ] },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { "_id" : 2, "grades" : [ 88,90 ,92] }]</span></p>


































</td>


































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;$slice</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;和$push,$each配合使用,用于限制元素个数</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> db.students.update(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {_id:1},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {$push:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {grades:{$each:,$slice:4}}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   )</span></p>


































</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;在_id=1的文档graders中添加元素</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{ "_id" : 1, "grades" : [&nbsp;&nbsp;85, 80, 80 ,99] },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { "_id" : 2, "grades" : [ 88,90 ,92] }]</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">如果使用$slice:-4,则保留后4个元素</span></p>


































</td>


































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$sort</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">和$push,$each配合使用,在添加元素后进行排序</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> db.students.update(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {_id:1},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {$push:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {grades:{$each:,$sort:1}}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   )</span></p>


































</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">在_id=1的文档graders中添加元素,并排序</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{ "_id" : 1, "grades" : },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { "_id" : 2, "grades" : [ 88,90 ,92] }]</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">如果使用$sort:-1,则倒序排序</span></p>


































</td>


































</tr>
<tr>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">$position</span></td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">和$push,$each配合使用,指定插入元素的位置</span></td>
<td>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px"> db.students.update(</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {_id:1},</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">     {$push:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">    {grades:{$each:,$position:1}}</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  }</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">   )</span></p>


































</td>
<td><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">&nbsp;在_id=1的文档graders中,从索引1开始插入元素</span>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">结果:</span></p>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  [{ "_id" : 1, "grades" : },</span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 12px">  { "_id" : 2, "grades" : [ 88,90 ,92] }]</span></p>


































</td>


































</tr>
































</tbody>
































</table>
<h3>4.删除(remove/delete)</h3>
<p>  在3.2以前的版本中,mongoDB使用remove方法来删除文档,用法如下:</p>
<p>  <img style="display: block; margin-left: auto; margin-right: auto" src="https://img2018.cnblogs.com/blog/1007918/201906/1007918-20190616143017259-1159581044.png" alt=""></p>
<p>  从3.2版本开始,提供了deleteOne()和deleteMany()方法,分别用于删除单条和多条document,语法如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">删除单条document,功能类似于remove设置justOne:true</span>
  db.userinfos.deleteOne({age:{$gt:<span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">}})
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">删除所有符合条件的document,功能类似于remove设置justOne:false</span>
  db.userinfos.deleteMany({age:{$gt:<span style="color: rgba(128, 0, 128, 1)">25</span>}})</pre>
</div>
<p>  本篇是mongoDB的第一篇,简单介绍了mongoDB的安装方法,通过js&nbsp;shell进行mongoDB的CRUD操作,后续会逐步介绍mongoDB的索引、数据聚合、GridFS和C#驱动,以及副本集和sharing集群搭建。如果本文由错误的地方,希望大家可以指出,我会及时修改,谢谢。</p>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    <div style="border: 2px solid #21759b; padding: 20px">
<div>作者:捞月亮的猴子</div>
    <div>出处:https://www.cnblogs.com/wyy1234/</div>
    <div>欢迎转载,但请标明出处。如果本文对您有些许帮助,点击一下推荐吧,Thanks♪(・ω・)ノ</div>
</div><br><br>
来源:https://www.cnblogs.com/wyy1234/p/10919567.html
頁: [1]
查看完整版本: 快速掌握mongoDB(一)——mongoDB安装部署和常用shell命令