快速掌握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> $lookup</td>
<td>表连接</td>
</tr>
<tr>
<td>primary key</td>
<td>primary key</td>
<td>主键,MongoDB自动将_id字段设置为主键</td>
</tr>
</tbody>
</table>
<p> </p>
<h2><span style="font-size: 1.5em">2. mongoDB安装</span> </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> 安装完成后,在任意目录下使用命令 <span class="cnblogs_code">mongo 192.168.70.133:27017</span> (mongo命令会默认启动127.0.0.1:27017)启动mongodb,mongoDB使用的是javascript 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> 这里简单使用一下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> <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> <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: "Microsoft YaHei"; font-size: 12px"> 类别</span></strong></td>
<td><strong><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 运算符</span></strong></td>
<td><strong><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 说明</span></strong></td>
<td><strong><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 实例</span></strong></td>
<td><strong><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 执行结果</span></strong></td>
</tr>
<tr>
<td rowspan="6">
<p><strong><span style="font-family: "Microsoft YaHei"; font-size: 12px">比较运算符 </span></strong></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$gt($gte)</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">大于(大于等于)</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.userinfos.find(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { age:{$gt:25}},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { name:1 }</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">查找age>25的文档的name</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{ "_id" : 4, "name" : "赵六" },</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 5, "name" : "田七" }]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $lt($lte)</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 小于(小于等于)</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.userinfos.find(</span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { age:{$lt:25}},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { name:1 }</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">查找age<25的文档的name</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果: </span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [ { "_id" : 1, "name" : "张三" },</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 2, "name" : "李四" } ]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $eq</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 等于</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.userinfos.find(</span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { age:{$eq:25}},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { name:1 }</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">查询age=25的文档的name</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [ { "_id" : 3, "name" : "王五" } ]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $ne</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 不等于</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.userinfos.find(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { age:{$ne:25}},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { name:1 }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 查询age!=25的文档的name</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{"_id" : 1,"name" : "张三"},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {"_id" : 2,"name" : "李四"},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {"_id" : 4,"name" : "赵六"},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {"_id" : 5,"name" : "田七"}]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $in</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 包含</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.userinfos.find(</span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { age:{$in:}},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { name:1 }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">查询age在中的文档的name</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [ { "_id" : 2, "name" : "李四" }, </span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 3, "name" : "王五" } ]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $nin</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 不包含</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.userinfos.find(</span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { age:{$nin:}},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { name:1 }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">查询age不在中的文档的name</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{"_id" : 1,"name" : "张三"},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {"_id" : 4,"name" : "赵六"},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {"_id" : 5,"name" : "田七"}]</span></p>
</td>
</tr>
<tr>
<td rowspan="4"><strong><span style="font-family: "Microsoft YaHei"; font-size: 12px">逻辑运算符</span></strong></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$and</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 与</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.userinfos.find(</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$and: [</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:{$eq:'张三'}},</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {age:{$eq:23}}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> ]},</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:1}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">查询name='张三'且age=23的文档 </span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [ { "_id" : 1, "name" : "张三" } ]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$not </span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">非</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.userinfos.find(</span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {age:{$not:{$in:}}},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:1}</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">查询age不在中的文档</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [ { "_id" : 4, "name" : "赵六" }, </span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 5, "name" : "田七" } ]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$or </span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 或</span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.userinfos.find(</span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$or: [</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:{$eq:'张三'}},</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {age:{$eq:24}}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> ]},</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:1}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">查询name='张三'或者age=24的文档 </span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [ { "_id" : 1, "name" : "张三" },</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 2, "name" : "李四" } ]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$nor </span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">或的取反</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.userinfos.find(</span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$nor: [</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:{$eq:'张三'}},</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {age:{$eq:24}}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> ]},</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:1}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 上边栗子的取反操作</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [ {"_id" : 3,"name" : "王五"},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {"_id" : 4,"name" : "赵六"},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {"_id" : 5,"name" : "田七"} ]</span></p>
</td>
</tr>
<tr>
<td rowspan="5"><strong><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 评估运算符</span></strong></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$mod</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">取余</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.userinfos.find(</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {age:{$mod:}},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:1}</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">查询name%10=3的文档</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">[ { "_id" : 1, "name" : "张三" } ]</span></p>
</td>
</tr>
<tr>
<td rowspan="2"><span style="font-family: "Microsoft YaHei"; font-size: 12px">$regex</span><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span></td>
<td rowspan="2"><span style="font-family: "Microsoft YaHei"; font-size: 12px">正则 </span><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.userinfos.find(</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:{$regex:/^张/i}},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:1}</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">查询name以张开头的文档</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">[ { "_id" : 1, "name" : "张三" } ]</span></p>
</td>
</tr>
<tr>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.userinfos.find(</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:{$in:[/^张/,/四$/]}},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:1}</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">查询name以张开头或者以四结尾的文档</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">[ { "_id" : 1, "name" : "张三" }, </span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">{ "_id" : 2, "name" : "李四" } ]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$where</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">where过滤</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.userinfos.find(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$where :function(){return this.name=='张三';}},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:1}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">查询名字为张三的记录</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [ { "_id" : 1, "name" : "张三" } ]</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">注意:where可以实现所有的过滤,但是效率不高。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">这是因为where采用逐行判断而不使用索引</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $expr</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 表达式过滤</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.userinfos.find(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { $expr:{$lt:["$age","$level"]}},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { name:1 }</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 查询age<level的记录</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">[ { "_id" : 3, "name" : "王五" },</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 4, "name" : "赵六" } ]</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span></p>
</td>
</tr>
<tr>
<td rowspan="2"><span style="font-family: "Microsoft YaHei"; font-size: 12px"><strong>元素运算符 </strong> </span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$exists</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">field是否存在</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.userinfos.find(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { address:{$exists:true}},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { name:1 }</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">查询存在address字段的文档</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">[ { "_id" : 5, "name" : "田七" }, </span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">{ "_id" : 6, "name" : "周八" } ]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$type</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">field类型</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.userinfos.find(</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:{$type:'string'}},</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:1}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 查询name为string的文档</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 所有文档都匹配</span></p>
</td>
</tr>
<tr>
<td rowspan="3"><span style="font-family: "Microsoft YaHei"; font-size: 12px"><strong>数组运算符</strong> </span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $all</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 包含所有元素才匹配成功</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.userinfos.find(</span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {roles:{$all:['vip','gen']}},</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:1}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">查询roles中包含vip和gen的文档</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [ { "_id" : 1, "name" : "张三" }, </span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">{ "_id" : 3, "name" : "王五" } ]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $eleMatch</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 只要有一个元素符合就匹配成功</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.userinfos.find(</span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {roles:{$elemMatch:{ $eq: 'vip', $ne: 'gen' }}},</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:1}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 查询roles中有元素等于vip,或有元素不等于gen的文档</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{"_id" : 1,"name" : "张三"},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {"_id" : 2,"name" : "李四"},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {"_id" : 3,"name" : "王五"}]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$size</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 元素个数相同的匹配成功</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.userinfos.find(</span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {roles:{$size:2}},</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:1}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 查询roles中有两个元素的文档</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">[ { "_id" : 1, "name" : "张三" },</span></p>
<p><span style="font-family: "Microsoft YaHei"; 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<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<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> <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"> <strong>值操作运算符</strong></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$currentDate</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">修改field值为当前时间,</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">如果field不存在则添加field</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.userinfos.update(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:'张三'},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$currentDate:{</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> createtime:{$type:'timestamp'}}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> )</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">将张三的createtime字段值修改为当前时间</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 格式为时间戳("createtime" : Timestamp(1560663270, 1))</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">补充:如果不设置$type,默认的格式为date</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 格式为date("createtime" : ISODate("2019-06-16T05:38:21.119Z"))</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$set</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">修改值</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.userinfos.update(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:'张三'},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$set:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {level:20}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> )</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 将张三的level修改为20。如果要修改的field不存在,不会添加新的field。</span></td>
</tr>
<tr>
<td rowspan="2"><span style="font-family: "Microsoft YaHei"; font-size: 12px">$setOnInsert </span></td>
<td rowspan="2">
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">只有在新增document时进行赋值,</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">一定要设置upsert:true</span></p>
<span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.userinfos.update(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:'张三'},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$setOnInsert:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {level:30}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {upsert:true}</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> )</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 因为已经有name=张三的document,所以不做任何操作</span></td>
</tr>
<tr>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.userinfos.update(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:'吴九'},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$setOnInsert:{level:30}},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {upsert:true}</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> )</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 添加一个name=吴九的document,并设置level为30</span></td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$inc</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">自增</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.userinfos.update(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:'张三'},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$inc:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {age:10}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> )</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">张三的age自增10,age修改为23+10=33</span></td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$mul</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">自乘</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.userinfos.update(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:'张三'},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$mul:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {age:2}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">张三的age自乘2,age修改为23*2=46</span></td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$min</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">取小</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.userinfos.update(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:'张三'},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$min:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {age:13}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">张三的age取小值,因为23>13,所以修改age为13。如果修改的值比23大,那么不做操作。</span></td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$max</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">取大</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.userinfos.update(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {name:'张三'},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$max:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {age:33}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">张三的age取大值,因为23<33,所以修改age为33。如果修改的值比23小,那么不做操作。</span></td>
</tr>
<tr>
<td rowspan="2"><strong>字段操作运算符</strong> </td>
<td><span style="font-family: "Microsoft YaHei"">$rename</span></td>
<td><span style="font-family: "Microsoft YaHei""> 修改filed的名字</span></td>
<td><span style="font-family: "Microsoft YaHei""> db.userinfos.update(</span>
<p><span style="font-family: "Microsoft YaHei""> {name:'张三'},<br> {$rename:</span></p>
<p><span style="font-family: "Microsoft YaHei""> {age:'年龄'}</span></p>
<p><span style="font-family: "Microsoft YaHei""> }</span><br><span style="font-family: "Microsoft YaHei""> )</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei""> 将张三的age字段名改成年龄,值不变,年龄=23</span></td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"">$unset</span></td>
<td><span style="font-family: "Microsoft YaHei""> 删除field</span></td>
<td><span style="font-family: "Microsoft YaHei""> db.userinfos.update(</span>
<p><span style="font-family: "Microsoft YaHei""> {name:'张三'},<br> {$unset:</span></p>
<p><span style="font-family: "Microsoft YaHei""> {level:''}</span></p>
<p><span style="font-family: "Microsoft YaHei""> }<br> )</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei""> 将张三的level字段删除</span></td>
</tr>
</tbody>
</table>
<p> </p>
<h4> 数组相关的update运算符:</h4>
<table border="0">
<tbody>
<tr>
<td colspan="5">
<p><strong><span style="font-family: "Microsoft YaHei"; 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: "Microsoft YaHei"; font-size: 12px"> 数组运算符</span></strong></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">单个占位符</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.students.updateOne(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { _id: 1, grades: 80 },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { $set: { "grades.$" : 82 } }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">修改_id=1的文档graders中第一个值为80的元素,值改成82</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{ "_id" : 1, "grades" : [ 85, 82, 80 ] },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 2, "grades" : [ 88, 90, 92 ] }]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $[]</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 所有元素占位符</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.students.updateOne(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { _id: 1},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { $set: { "grades.$[]" : 100 } }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">修改_id=1的文档graders中所有元素,值改成100</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{ "_id" : 1, "grades" : [ 100, 100, 100 ] },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 2, "grades" : [ 88, 90, 92 ] }]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $[<identifier>]</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 符合arrayFilter过滤条件的元素占位符</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.students.updateOne(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { _id: 2},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { $set: { "grades.$" : 100 } },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { arrayFilters: [ { "element": { $gte: 90 } } ]}</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">修改_id=2的文档graders中大于等于90的元素,值改成100</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{ "_id" : 1, "grades" : [ 85, 82, 80 ] },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 2, "grades" : [ 88, 100, 100 ] }]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $push</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 添加元素</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.students.updateOne(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { _id: 1 },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { $push: { "grades" : 98 } }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">在_id=1的文档graders中添加元素</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{ "_id" : 1, "grades" : [ 85, 80, 80 ,98 ] },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 2, "grades" : [ 88, 90, 92 ] }]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$addToSet</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 添加不存在的元素,如果元素已经存在则无操作</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.students.updateOne(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { _id: 1 },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { $addToSet: { "grades" : 100 } }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">在_id=1的文档graders中添加元素</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{ "_id" : 1, "grades" : [ 85, 80, 80 ,98,100 ] },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 2, "grades" : [ 88, 90, 92 ] }]</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">补充:如果添加的元素是85,因为85已经存在,所以不执行操作</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $pop</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 弹出(移除)元素</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">db.students.updateOne(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { _id: 1 },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { $pop: { "grades" : 1 } }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px">)</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 移除最后一个元素</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{ "_id" : 1, "grades" : [ 85, 80 ] },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 2, "grades" : [ 88, 90, 92 ] }]</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">补充:如果{ $pop: { "grades" : -1 } }表示从前边弹出,移除第一个元素</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$pullAll</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">根据值移除数组中的元素</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.students.update(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {_id:2},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$pullAll:{"grades":}}</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> )</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">移除_id=2的文档的graders中值为88,90的所有元素</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{ "_id" : 1, "grades" : [ 85, 80, 80 ] },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 2, "grades" : [ 92 ] }]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $pull</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 移除符合条件的元素</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.students.update(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {_id:2},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$pull:{"grades":{$gt:90}}}</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> )</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">移除_id=2的文档的graders中大于90的所有元素</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{ "_id" : 1, "grades" : [ 85, 80, 80 ] },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 2, "grades" : [ 88,90 ] }]</span></p>
</td>
</tr>
<tr>
<td rowspan="4">
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> <strong> 数组批量添加</strong></span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"><strong>相关运算符</strong></span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $each</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 和$push,$addToSet配合使用,用于批量添加元素</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.students.update(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {_id:1},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$push:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {grades:{$each:}}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> }</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> )</span></p>
</td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">在_id=1的文档graders中添加元素</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{ "_id" : 1, "grades" : [ 85, 80, 80 ,99,100 ] },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 2, "grades" : [ 88,90 ,92] }]</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> $slice</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 和$push,$each配合使用,用于限制元素个数</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> </span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.students.update(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {_id:1},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$push:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {grades:{$each:,$slice:4}}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> )</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 在_id=1的文档graders中添加元素</span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{ "_id" : 1, "grades" : [ 85, 80, 80 ,99] },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 2, "grades" : [ 88,90 ,92] }]</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">如果使用$slice:-4,则保留后4个元素</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$sort</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">和$push,$each配合使用,在添加元素后进行排序</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.students.update(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {_id:1},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$push:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {grades:{$each:,$sort:1}}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> )</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">在_id=1的文档graders中添加元素,并排序</span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{ "_id" : 1, "grades" : },</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> { "_id" : 2, "grades" : [ 88,90 ,92] }]</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">如果使用$sort:-1,则倒序排序</span></p>
</td>
</tr>
<tr>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">$position</span></td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px">和$push,$each配合使用,指定插入元素的位置</span></td>
<td>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> db.students.update(</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {_id:1},</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {$push:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> {grades:{$each:,$position:1}}</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> }</span><br><span style="font-family: "Microsoft YaHei"; font-size: 12px"> )</span></p>
</td>
<td><span style="font-family: "Microsoft YaHei"; font-size: 12px"> 在_id=1的文档graders中,从索引1开始插入元素</span>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px">结果:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 12px"> [{ "_id" : 1, "grades" : },</span><br><span style="font-family: "Microsoft YaHei"; 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 shell进行mongoDB的CRUD操作,后续会逐步介绍mongoDB的索引、数据聚合、GridFS和C#驱动,以及副本集和sharing集群搭建。如果本文由错误的地方,希望大家可以指出,我会及时修改,谢谢。</p>
<p> </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]