静瞰世界 發表於 2017-5-3 09:12:00

MongoDB数据库

<h1>什么是MongoDB ?</h1>
<p>MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。</p>
<p>在高负载的情况下,添加更多的节点,可以保证服务器性能。</p>
<p>MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。</p>
<p>MongoDB 将数据存储为一个文档,数据结构由键值(key=&gt;value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。</p>
<p>&nbsp;</p>
<h1>主要特点</h1>
<ul>
<li>MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。</li>
<li>你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Ning",Address="Beijing")来实现更快的排序。</li>
<li>你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。</li>
<li>如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。</li>
<li>Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。</li>
<li>MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。</li>
<li>Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。</li>
<li>Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。</li>
<li>Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。</li>
<li>GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。</li>
<li>MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。</li>
<li>MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。</li>
</ul>
<p>&nbsp;</p>
<h1>下载安装配置启动连接</h1>
<p>官网:https://www.mongodb.com/download-center#community</p>
<div class="cnblogs_code">
<pre>curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 下载</span>
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz                              <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 解压</span>
mvmongodb-linux-x86_64-3.0.6/ /usr/local/mongodb                  <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 将解压包拷贝到指定目录</span>
<span style="color: rgba(0, 0, 0, 1)">
export PATH</span>=&lt;mongodb-install-directory&gt;/bin:$PATH      <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">&lt;mongodb-install-directory&gt; 为Mongo的安装路径,如本文的 /usr/local/mongodb </span><span style="color: rgba(0, 0, 0, 1)">
mkdir </span>-p /data/db      <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">创建数据库目录(启动指定--dbpath)</span></pre>
</div>
<h2>配置文件</h2>
<div class="cnblogs_code">
<pre>suoningdeMacBook-Pro:~ suoning$ cat /usr/local/etc/<span style="color: rgba(0, 0, 0, 1)">mongod.conf
systemLog:
destination: file
path: </span>/usr/local/var/log/mongodb/<span style="color: rgba(0, 0, 0, 1)">mongo.log
logAppend: true
storage:
dbPath: </span>/usr/local/var/<span style="color: rgba(0, 0, 0, 1)">mongodb
net:
bindIp: </span>127.0.0.1<span style="color: rgba(0, 0, 0, 1)">
port: </span>11811<span style="color: rgba(0, 0, 0, 1)">
suoningdeMacBook</span>-Pro:~ suoning$</pre>
</div>
<h2>启动</h2>
<div class="cnblogs_code">
<pre>$ ./<span style="color: rgba(0, 0, 0, 1)">mongod
$ .</span>/mongod --dbpath=/data/db --<span style="color: rgba(0, 0, 0, 1)">rest
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 默认端口为:27017</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)"> MongoDB 提供了简单的 HTTP 用户界面。 如果你想启用该功能,需要在启动的时候指定参数 --rest</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)"> MongoDB 的 Web 界面访问端口比服务的端口多1000。如果你的MongoDB运行端口使用默认的27017,你可以在端口号为28017访问web用户界面,即地址为:http://localhost:28017</span></pre>
</div>
<h2>连接</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">$ sudo mongo
$ sudo mongo </span>--port 11811<span style="color: rgba(0, 0, 0, 1)">
$ sudo mongo </span>-u root -p pwd 127.0.0.1:11811/test</pre>
</div>
<p>&nbsp;</p>
<h1>安全验证</h1>
<h2>创建管理员</h2>
<div class="cnblogs_code">
<pre>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> use admin
switched to db admin
</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> db
admin
</span>&gt; db.createUser({user:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">suoning</span><span style="color: rgba(128, 0, 0, 1)">'</span>,pwd:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span>,roles:[{role:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">userAdminAnyDatabase</span><span style="color: rgba(128, 0, 0, 1)">'</span>,db:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">admin</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">}]})
Successfully added user: {
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">user</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)">suoning</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">roles</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> : [
      {
            </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">role</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)">userAdminAnyDatabase</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">db</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)">admin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      }
    ]
}
</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> exit
bye</span></pre>
</div>
<h2>修改配置文件</h2>
<p>版本区别与更多配置:https://docs.mongodb.com/manual/administration/configuration/</p>
<div class="cnblogs_code">
<pre>suoningdeMacBook-Pro:~ suoning$ cat /usr/local/etc/<span style="color: rgba(0, 0, 0, 1)">mongod.conf
systemLog:
destination: file
path: </span>/usr/local/var/log/mongodb/<span style="color: rgba(0, 0, 0, 1)">mongo.log
logAppend: true
storage:
dbPath: </span>/usr/local/var/<span style="color: rgba(0, 0, 0, 1)">mongodb
net:
bindIp: </span>127.0.0.1<span style="color: rgba(0, 0, 0, 1)">
port: </span>11811<span style="color: rgba(0, 0, 0, 1)">
security:
   authorization: enabled
suoningdeMacBook</span>-Pro:~ suoning$ </pre>
</div>
<h2>重启验证</h2>
<div class="cnblogs_code">
<pre>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> show dbs
</span>2017-04-25T08:41:50.126+0800<span style="color: rgba(0, 0, 0, 1)"> E QUERY    Error: listDatabases failed:{
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ok</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> : 0,
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">errmsg</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)">not authorized on admin to execute command { listDatabases: 1.0 }</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">code</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 13<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)">codeName</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)">Unauthorized</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
} :
_getErrorWithCode@src</span>/mongo/shell/utils.js:25:13<span style="color: rgba(0, 0, 0, 1)">
Mongo.prototype.getDBs@src</span>/mongo/shell/mongo.js:62:1<span style="color: rgba(0, 0, 0, 1)">
shellHelper.show@src</span>/mongo/shell/utils.js:761:19<span style="color: rgba(0, 0, 0, 1)">
shellHelper@src</span>/mongo/shell/utils.js:651:15<span style="color: rgba(0, 0, 0, 1)">
@(shellhelp2):</span>1:1
&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> use admin
switched to db admin
</span>&gt; db.auth(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">suoning</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)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span>1
&gt;<span style="color: rgba(0, 0, 0, 1)"> show dbs
admin0.000GB
local0.000GB
</span>&gt;</pre>
</div>
<h2>创建普通用户</h2>
<div class="cnblogs_code">
<pre>&gt;<span style="color: rgba(0, 0, 0, 1)"> use admin
switched to db admin
</span>&gt; db.auth(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">suoning</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)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span>1
&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> use mydb
switched to db mydb
</span>&gt; db.createUser({user:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">nick</span><span style="color: rgba(128, 0, 0, 1)">'</span>,pwd:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span>,roles:[{role:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">readWrite</span><span style="color: rgba(128, 0, 0, 1)">'</span>,db:<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)">}]})
Successfully added user: {
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">user</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)">nick</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">roles</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> : [
      {
            </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">role</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)">readWrite</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">db</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)">mydb</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      }
    ]
}
</span>&gt;
&gt; db.auth(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">nick</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)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span>1
&gt;</pre>
</div>
<h2>删除用户</h2>
<div class="cnblogs_code">
<pre>&gt; db.dropUser(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nick</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
true</span></pre>
</div>
<h2>查看所有存在用户</h2>
<div class="cnblogs_code">
<pre>&gt;<span style="color: rgba(0, 0, 0, 1)"> use admin
switched to db admin
</span>&gt; db.auth(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">suoning</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)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">1</span>
&gt;<span style="color: rgba(0, 0, 0, 1)"> db.system.users.find()
{ </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, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">admin.suoning</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)">user</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)">suoning</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)">db</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)">admin</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)">credentials</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)">SCRAM-SHA-1</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)">iterationCount</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">10000</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">salt</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)">XXW+MD0TENKSkzk0bM2EGw==</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)">storedKey</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)">iIuv5DpGOksvaFpFOSnAIRSwh+w=</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)">serverKey</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)">ZGA7/Lkjv+RJX3fNANQN9hgBUwY=</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)">roles</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)">role</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)">userAdminAnyDatabase</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)">db</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)">admin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> } ] }
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mydb.nick</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)">user</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)">nick</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)">db</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)">mydb</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)">credentials</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)">SCRAM-SHA-1</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)">iterationCount</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">10000</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">salt</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)">j71pQs/OR1eRtRa1IT80+w==</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)">storedKey</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)">5hkHmU+FwdENDgGjV0wIbmTAOrQ=</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)">serverKey</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)">Qs+c0gfGNUpwD/ZKgeOackzwNxI=</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)">roles</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)">role</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)">readWrite</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)">db</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)">mydb</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> } ] }
</span>&gt; </pre>
</div>
<p>&nbsp;</p>
<h2>总结:</h2>
<ul>
<li>创建超级管理员需要未开启权限模式的情况下执行;</li>
<li>如果 MongoDB 开启了权限模式,并且某一个数据库没有任何用户时,在不验证权限的情况下,可以创建一个用户,当继续创建第二个用户时,会返回错误,若想继续创建用户则必须登录;</li>
<li>用户只能在用户所在数据库登录,管理员需要通过admin认证后才能管理其他数据库。</li>
</ul>
<p>&nbsp;</p>
<h1>数据库角色</h1>
<ol>
<li>内建的角色</li>
<li>数据库用户角色:read、readWrite;</li>
<li>数据库管理角色:dbAdmin、dbOwner、userAdmin;</li>
<li>集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;</li>
<li>备份恢复角色:backup、restore;</li>
<li>所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase</li>
<li>超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)</li>
<li>内部角色:__system</li>
</ol>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">角色说明:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限</span></pre>
</div>
<p>&nbsp;</p>
<h1>数据类型</h1>
<table class="reference">
<tbody>
<tr><th>数据类型</th><th>描述</th></tr>
<tr>
<td>String</td>
<td>字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。</td>
</tr>
<tr>
<td>Integer</td>
<td>整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。</td>
</tr>
<tr>
<td>Boolean</td>
<td>布尔值。用于存储布尔值(真/假)。</td>
</tr>
<tr>
<td>Double</td>
<td>双精度浮点值。用于存储浮点值。</td>
</tr>
<tr>
<td>Min/Max keys</td>
<td>将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。</td>
</tr>
<tr>
<td>Arrays</td>
<td>用于将数组或列表或多个值存储为一个键。</td>
</tr>
<tr>
<td>Timestamp</td>
<td>时间戳。记录文档修改或添加的具体时间。</td>
</tr>
<tr>
<td>Object</td>
<td>用于内嵌文档。</td>
</tr>
<tr>
<td>Null</td>
<td>用于创建空值。</td>
</tr>
<tr>
<td>Symbol</td>
<td>符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。</td>
</tr>
<tr>
<td>Date</td>
<td>日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。</td>
</tr>
<tr>
<td>Object ID</td>
<td>对象 ID。用于创建文档的 ID。</td>
</tr>
<tr>
<td>Binary Data</td>
<td>二进制数据。用于存储二进制数据。</td>
</tr>
<tr>
<td>Code</td>
<td>代码类型。用于在文档中存储 JavaScript 代码。</td>
</tr>
<tr>
<td>Regular expression</td>
<td>正则表达式类型。用于存储正则表达式。</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h1>库与表操作</h1>
<h2>创建库与表</h2>
<div class="cnblogs_code">
<pre>&gt;<span style="color: rgba(0, 0, 0, 1)"> show dbs
admin</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">.000GB
local</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">.000GB
</span>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> use mydb
switched to db mydb
</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> db
mydb
</span>&gt;
&gt; db.mydb.insert({<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">name</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)">Nick</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)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 128, 1)">18</span><span style="color: rgba(0, 0, 0, 1)">})
WriteResult({ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nInserted</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> })
</span>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> show dbs
admin</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">.000GB
local</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">.000GB
mydb   </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">.000GB
</span>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> show tables;
mydb
</span>&gt;</pre>
</div>
<h2>&nbsp;删除库</h2>
<div class="cnblogs_code">
<pre>&gt; db.dropUser(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nick</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">true</span>
&gt;
&gt; db.createUser({user:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">nick</span><span style="color: rgba(128, 0, 0, 1)">'</span>,pwd:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span>,roles:[{role:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dbAdmin</span><span style="color: rgba(128, 0, 0, 1)">'</span>,db:<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)">}]})
Successfully added user: {
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">user</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)">nick</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">roles</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> : [
      {
            </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">role</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)">dbAdmin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">db</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)">mydb</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      }
    ]
}
</span>&gt;
&gt; db.auth(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nick</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)">123456</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">1</span>
&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> use mydb
switched to db mydb
</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> db
mydb
</span>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> show dbs;
admin</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">.000GB
local</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">.000GB
mydb   </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">.000GB
</span>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> db.dropDatabase()
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dropped</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)">mydb</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)">ok</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> }
</span>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> show dbs;
admin</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">.000GB
local</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">.000GB
</span>&gt; </pre>
</div>
<h2>&nbsp;删除表</h2>
<div class="cnblogs_code">
<pre>&gt;<span style="color: rgba(0, 0, 0, 1)"> db;
mydb
</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> show tables;
mydb
</span>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> db.mydb.drop();
</span><span style="color: rgba(0, 0, 255, 1)">true</span>
&gt;<span style="color: rgba(0, 0, 0, 1)"> show tables;
</span>&gt; </pre>
</div>
<p>&nbsp;</p>
<h1>文档操作</h1>
<h2>增</h2>
<p>使用 insert() 或 save() 方法向集合中插入文档,语法如下:</p>
<div class="cnblogs_code">
<pre>db.COLLECTION_NAME.insert(document)</pre>
</div>
<p>创建读写用户:</p>
<div class="cnblogs_code">
<pre>&gt; db.createUser({user:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ning</span><span style="color: rgba(128, 0, 0, 1)">'</span>,pwd:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span>,roles:[{role:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">readWrite</span><span style="color: rgba(128, 0, 0, 1)">'</span>,db:<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)">}]})
Successfully added user: {
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">user</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)">ning</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">roles</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> : [
      {
            </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">role</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)">readWrite</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">db</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)">mydb</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      }
    ]
}
</span>&gt;
&gt; db.auth(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ning</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)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">1</span>
&gt;</pre>
</div>
<p>插入数据:</p>
<div class="cnblogs_code">
<pre>&gt;
&gt; db.user.insert({<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">name</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)">nick</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)">age</span><span style="color: rgba(128, 0, 0, 1)">'</span>:<span style="color: rgba(128, 0, 128, 1)">18</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">girlfriend</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)">jenny</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)">coco</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)">julia</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]})
WriteResult({ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nInserted</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> })
</span>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> show tables
user
</span>&gt;</pre>
</div>
<div class="cnblogs_code">
<pre>&gt;
&gt; vb = ({<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">sex</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)">man</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">});
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sex</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)">man</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> }
</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> db.user.insert(vb);
WriteResult({ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nInserted</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> })
</span>&gt;</pre>
</div>
<p>&nbsp;插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。</p>
<p>&nbsp;</p>
<h2>删</h2>
<p>remove() 方法的基本语法格式如下所示:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.collection.remove(
   </span>&lt;query&gt;<span style="color: rgba(0, 0, 0, 1)">,
   </span>&lt;justOne&gt;<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)"> MongoDB 是 2.6 版本以后的,语法格式如下:</span><span style="color: rgba(0, 0, 0, 1)">
db.collection.remove(
   </span>&lt;query&gt;<span style="color: rgba(0, 0, 0, 1)">,
   {
   justOne: </span>&lt;boolean&gt;<span style="color: rgba(0, 0, 0, 1)">,
   writeConcern: </span>&lt;document&gt;<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, 0, 1)">query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 </span>1<span style="color: rgba(0, 0, 0, 1)">,则只删除一个文档。
writeConcern :(可选)抛出异常的级别。</span></pre>
</div>
<p>删除数据:</p>
<div class="cnblogs_code">
<pre>&gt;<span style="color: rgba(0, 0, 0, 1)"> db.user.find()
{ </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> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">58fef7d55b9ea92ab29fbd4b</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)">name</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)">nick</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)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 18, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">girlfriend</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)">jenny</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)">coco</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)">julia</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> ] }
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">58fef9165b9ea92ab29fbd4c</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)">sex</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)">man</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> }
</span>&gt;
&gt; db.user.remove({<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">sex</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)">man</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">})
WriteResult({ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nRemoved</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 1<span style="color: rgba(0, 0, 0, 1)"> })
</span>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> db.user.find()
{ </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> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">58fef7d55b9ea92ab29fbd4b</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)">name</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)">nick</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)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 18, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">girlfriend</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)">jenny</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)">coco</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)">julia</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> ] }
</span>&gt;</pre>
</div>
<p>删除第一条找到的记录可以设置 justOne 为 1:</p>
<div class="cnblogs_code">
<pre>&gt;db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)</pre>
</div>
<p>删除所有数据:</p>
<div class="cnblogs_code">
<pre>&gt;<span style="color: rgba(0, 0, 0, 1)">db.col.remove({})
</span>&gt;<span style="color: rgba(0, 0, 0, 1)">db.col.find()
</span>&gt;</pre>
</div>
<p>&nbsp;</p>
<h2>改</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 只更新一条</span>
&gt;<span style="color: rgba(0, 0, 0, 1)"> db.user.find()
{ </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> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">58fef7d55b9ea92ab29fbd4b</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)">name</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)">nick</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)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 21, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">girlfriend</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)">jenny</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)">coco</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)">julia</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> ] }
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">58feffe55b9ea92ab29fbd4d</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)">name</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)">jenny</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)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 21<span style="color: rgba(0, 0, 0, 1)"> }
</span>&gt;
&gt; db.user.update({<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">age</span><span style="color: rgba(128, 0, 0, 1)">'</span>:21},{$set:{<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">age</span><span style="color: rgba(128, 0, 0, 1)">'</span>:22<span style="color: rgba(0, 0, 0, 1)">}})
WriteResult({ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nMatched</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 1, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nUpserted</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 0, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nModified</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 1<span style="color: rgba(0, 0, 0, 1)"> })
</span>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> db.user.find()
{ </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> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">58fef7d55b9ea92ab29fbd4b</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)">name</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)">nick</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)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 22, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">girlfriend</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)">jenny</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)">coco</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)">julia</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> ] }
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">58feffe55b9ea92ab29fbd4d</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)">name</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)">jenny</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)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 21<span style="color: rgba(0, 0, 0, 1)"> }
</span>&gt;

<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 更新多条</span>
&gt;<span style="color: rgba(0, 0, 0, 1)"> db.user.find()
{ </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> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">58fef7d55b9ea92ab29fbd4b</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)">name</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)">nick</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)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 21, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">girlfriend</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)">jenny</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)">coco</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)">julia</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> ] }
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">58feffe55b9ea92ab29fbd4d</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)">name</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)">jenny</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)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 21<span style="color: rgba(0, 0, 0, 1)"> }
</span>&gt;
&gt; db.user.update({<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">age</span><span style="color: rgba(128, 0, 0, 1)">'</span>:21},{$set:{<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">age</span><span style="color: rgba(128, 0, 0, 1)">'</span>:22<span style="color: rgba(0, 0, 0, 1)">}},{multi:true})
WriteResult({ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nMatched</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 2, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nUpserted</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 0, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nModified</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 2<span style="color: rgba(0, 0, 0, 1)"> })
</span>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> db.user.find()
{ </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> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">58fef7d55b9ea92ab29fbd4b</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)">name</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)">nick</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)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 22, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">girlfriend</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)">jenny</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)">coco</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)">julia</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> ] }
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">58feffe55b9ea92ab29fbd4d</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)">name</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)">jenny</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)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 22<span style="color: rgba(0, 0, 0, 1)"> }
</span>&gt;</pre>
</div>
<p>save() 方法通过传入的文档来替换已有文档。语法格式如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.collection.save(
   </span>&lt;document&gt;<span style="color: rgba(0, 0, 0, 1)">,
   {
   writeConcern: </span>&lt;document&gt;<span style="color: rgba(0, 0, 0, 1)">
   }
)

参数说明:
document : 文档数据。
writeConcern :可选,抛出异常的级别。</span></pre>
</div>
<div class="cnblogs_code">
<pre>&gt;<span style="color: rgba(0, 0, 0, 1)"> db.user.find()
{ </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> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">58fef7d55b9ea92ab29fbd4b</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)">name</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)">nick</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)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 22, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">girlfriend</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)">jenny</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)">coco</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)">julia</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> ] }
</span>&gt;
&gt; db.user.save({ <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> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">58fef7d55b9ea92ab29fbd4b</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)">name</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)">nick</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)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 18, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">girlfriend</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)">jenny</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)">julia</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> ] })
WriteResult({ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nMatched</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 1, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nUpserted</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 0, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nModified</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 1<span style="color: rgba(0, 0, 0, 1)"> })
</span>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)"> db.user.find().pretty()
{
    </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> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">58fef7d55b9ea92ab29fbd4b</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">),
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">name</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)">nick</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 18<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)">girlfriend</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> : [
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">jenny</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">julia</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
    ]
}
</span>&gt;</pre>
</div>
<p>&nbsp;</p>
<h2>查</h2>
<p>查询数据的语法格式如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.mydb.find(query, projection)

query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">pretty() 方法以格式化的方式来显示所有文档。
</span>&gt;db.mydb.find().pretty()</pre>
</div>
<h3>大于小于:</h3>
<table class="reference">
<thead>
<tr><th>操作</th><th>格式</th><th>范例</th><th>RDBMS中的类似语句</th></tr>
</thead>
<tbody>
<tr>
<td>等于</td>
<td><code>{&lt;key&gt;:&lt;value&gt;</code>}</td>
<td><code>db.col.find({"name":"nick"}).pretty()</code></td>
<td><code>where name = 'nick'</code></td>
</tr>
<tr>
<td>小于</td>
<td><code>{&lt;key&gt;:{$lt:&lt;value&gt;}}</code></td>
<td><code>db.col.find({"likes":{$lt:50}}).pretty()</code></td>
<td><code>where likes &lt; 50</code></td>
</tr>
<tr>
<td>小于或等于</td>
<td><code>{&lt;key&gt;:{$lte:&lt;value&gt;}}</code></td>
<td><code>db.col.find({"likes":{$lte:50}}).pretty()</code></td>
<td><code>where likes &lt;= 50</code></td>
</tr>
<tr>
<td>大于</td>
<td><code>{&lt;key&gt;:{$gt:&lt;value&gt;}}</code></td>
<td><code>db.col.find({"likes":{$gt:50}}).pretty()</code></td>
<td><code>where likes &gt; 50</code></td>
</tr>
<tr>
<td>大于或等于</td>
<td><code>{&lt;key&gt;:{$gte:&lt;value&gt;}}</code></td>
<td><code>db.col.find({"likes":{$gte:50}}).pretty()</code></td>
<td><code>where likes &gt;= 50</code></td>
</tr>
<tr>
<td>不等于</td>
<td><code>{&lt;key&gt;:{$ne:&lt;value&gt;}}</code></td>
<td><code>db.col.find({"likes":{$ne:50}}).pretty()</code></td>
<td><code>where likes != 50</code></td>
</tr>
</tbody>
</table>
<p>获取"col"集合中 "likes" 大于100,小于 200 的数据,你可以使用以下命令:</p>
<div class="cnblogs_code">
<pre>db.col.find({likes : {$lt :200, $gt : 100}})&nbsp;</pre>
</div>
<h3>&nbsp;and or:</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">and</span><span style="color: rgba(0, 0, 0, 1)">:
    </span>&gt;<span style="color: rgba(0, 0, 0, 1)">db.col.find({key1:value1, key2:value2}).pretty()
</span><span style="color: rgba(0, 0, 255, 1)">or</span><span style="color: rgba(0, 0, 0, 1)">:
    </span>&gt;<span style="color: rgba(0, 0, 0, 1)">db.col.find(
       {
          $</span><span style="color: rgba(0, 0, 255, 1)">or</span><span style="color: rgba(0, 0, 0, 1)">: [
             {key1: value1}, {key2:value2}
          ]
       }
    ).pretty()</span></pre>
</div>
<h3>Limit、Skip</h3>
<p>limit()方法基本语法如下所示:</p>
<div class="cnblogs_code">
<pre>&gt;db.COLLECTION_NAME.find().limit(NUMBER)</pre>
</div>
<p>skip() 方法脚本语法格式如下:</p>
<p>使用skip()方法来跳过指定数量的数据,skip方法接受一个数字参数作为跳过的记录条数,默认为0。</p>
<div class="cnblogs_code">
<pre>&gt;db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)</pre>
</div>
<h3>&nbsp;sort</h3>
<p>sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。</p>
<div class="cnblogs_code">
<pre>&gt;db.COLLECTION_NAME.find().sort({KEY:1})</pre>
</div>
<h3>操作符 $type</h3>
<p>获取 "col" 集合中 title 为 String 的数据:</p>
<div class="cnblogs_code">
<pre>db.col.find({<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">title</span><span style="color: rgba(128, 0, 0, 1)">"</span> : {$type : 2}})</pre>
</div>
<p>对应匹配类型:</p>
<table class="reference">
<tbody>
<tr><th><strong>类型</strong></th><th><strong>数字</strong></th><th><strong>备注</strong></th></tr>
<tr class="row-even">
<td>Double</td>
<td>1</td>
<td>&nbsp;</td>
</tr>
<tr class="row-odd">
<td>String</td>
<td>2</td>
<td>&nbsp;</td>
</tr>
<tr class="row-even">
<td>Object</td>
<td>3</td>
<td>&nbsp;</td>
</tr>
<tr class="row-odd">
<td>Array</td>
<td>4</td>
<td>&nbsp;</td>
</tr>
<tr class="row-even">
<td>Binary data</td>
<td>5</td>
<td>&nbsp;</td>
</tr>
<tr class="row-odd">
<td>Undefined</td>
<td>6</td>
<td>已废弃。</td>
</tr>
<tr class="row-even">
<td>Object id</td>
<td>7</td>
<td>&nbsp;</td>
</tr>
<tr class="row-odd">
<td>Boolean</td>
<td>8</td>
<td>&nbsp;</td>
</tr>
<tr class="row-even">
<td>Date</td>
<td>9</td>
<td>&nbsp;</td>
</tr>
<tr class="row-odd">
<td>Null</td>
<td>10</td>
<td>&nbsp;</td>
</tr>
<tr class="row-even">
<td>Regular Expression</td>
<td>11</td>
<td>&nbsp;</td>
</tr>
<tr class="row-odd">
<td>JavaScript</td>
<td>13</td>
<td>&nbsp;</td>
</tr>
<tr class="row-even">
<td>Symbol</td>
<td>14</td>
<td>&nbsp;</td>
</tr>
<tr class="row-odd">
<td>JavaScript (with scope)</td>
<td>15</td>
<td>&nbsp;</td>
</tr>
<tr class="row-even">
<td>32-bit integer</td>
<td>16</td>
<td>&nbsp;</td>
</tr>
<tr class="row-odd">
<td>Timestamp</td>
<td>17</td>
<td>&nbsp;</td>
</tr>
<tr class="row-even">
<td>64-bit integer</td>
<td>18</td>
<td>&nbsp;</td>
</tr>
<tr class="row-odd">
<td>Min key</td>
<td>255</td>
<td>Query with&nbsp;<tt class="docutils literal"><span class="pre">-1</span></tt>.</td>
</tr>
<tr class="row-even">
<td>Max key</td>
<td>127</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h1>索引</h1>
<p>使用 ensureIndex() 方法来创建索引,语法如下:</p>
<div class="cnblogs_code">
<pre>&gt;db.COLLECTION_NAME.ensureIndex({KEY:1<span style="color: rgba(0, 0, 0, 1)">})

语法中 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为</span>-1即可</pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">复合索引
db.col.ensureIndex({</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">title</span><span style="color: rgba(128, 0, 0, 1)">"</span>:1,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">description</span><span style="color: rgba(128, 0, 0, 1)">"</span>:-1})</pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">后台执行
通过在创建索引时加background:true 的选项,让创建工作在后台执行
db.values.ensureIndex({open: </span>1, close: 1}, {background: true})</pre>
</div>
<p>ensureIndex() 接收可选参数,可选参数列表如下:</p>
<table class="reference">
<tbody>
<tr><th>Parameter</th><th>Type</th><th>Description</th></tr>
<tr>
<td>background</td>
<td>Boolean</td>
<td>建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为<strong>false</strong>。</td>
</tr>
<tr>
<td>unique</td>
<td>Boolean</td>
<td>建立的索引是否唯一。指定为true创建唯一索引。默认值为<strong>false</strong>.</td>
</tr>
<tr>
<td>name</td>
<td>string</td>
<td>索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。</td>
</tr>
<tr>
<td>dropDups</td>
<td>Boolean</td>
<td>在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为&nbsp;<strong>false</strong>.</td>
</tr>
<tr>
<td>sparse</td>
<td>Boolean</td>
<td>对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为&nbsp;<strong>false</strong>.</td>
</tr>
<tr>
<td>expireAfterSeconds</td>
<td>integer</td>
<td>指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。</td>
</tr>
<tr>
<td>v</td>
<td>index version</td>
<td>索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。</td>
</tr>
<tr>
<td>weights</td>
<td>document</td>
<td>索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。</td>
</tr>
<tr>
<td>default_language</td>
<td>string</td>
<td>对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语</td>
</tr>
<tr>
<td>language_override</td>
<td>string</td>
<td>对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.</td>
</tr>
</tbody>
</table>
<p>索引不能被以下的查询使用:</p>
<ul>
<li>正则表达式及非操作符,如 $nin, $not, 等。</li>
<li>算术运算符,如 $mod, 等。</li>
<li>$where 子句</li>
</ul>
<h2>最大范围</h2>
<ul>
<li>集合中索引不能超过64个</li>
<li>索引名的长度不能超过125个字符&nbsp;</li>
<li>一个复合索引最多可以有31个字段</li>
<li>现有的索引字段的值超过索引键的限制,MongoDB中不会创建索引。</li>
</ul>
<p>&nbsp;</p>
<h1>聚合</h1>
<p>聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。</p>
<p>聚合的方法使用aggregate()方法,基本语法格式如下所示:</p>
<div class="cnblogs_code">
<pre>&gt;db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)</pre>
</div>
<div class="cnblogs_code">
<pre>&gt; db.mycol.aggregate([{$group : {_id : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">$by_user</span><span style="color: rgba(128, 0, 0, 1)">"</span>, num_tutorial : {$sum : 1<span style="color: rgba(0, 0, 0, 1)">}}}])

以上实例类似sql语句: select by_user, count(</span>*) <span style="color: rgba(0, 0, 255, 1)">from</span><span style="color: rgba(0, 0, 0, 1)"> mycol group by by_user
我们通过字段by_user字段对数据进行分组,并计算by_user字段相同值的总和。</span></pre>
</div>
<table class="reference">
<tbody>
<tr><th>表达式</th><th>描述</th><th>实例</th></tr>
<tr>
<td>$sum</td>
<td>计算总和。</td>
<td>db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])</td>
</tr>
<tr>
<td>$avg</td>
<td>计算平均值</td>
<td>db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])</td>
</tr>
<tr>
<td>$min</td>
<td>获取集合中所有文档对应值得最小值。</td>
<td>db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])</td>
</tr>
<tr>
<td>$max</td>
<td>获取集合中所有文档对应值得最大值。</td>
<td>db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])</td>
</tr>
<tr>
<td>$push</td>
<td>在结果文档中插入值到一个数组中。</td>
<td>db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])</td>
</tr>
<tr>
<td>$addToSet</td>
<td>在结果文档中插入值到一个数组中,但不创建副本。</td>
<td>db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])</td>
</tr>
<tr>
<td>$first</td>
<td>根据资源文档的排序获取第一个文档数据。</td>
<td>db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])</td>
</tr>
<tr>
<td>$last</td>
<td>根据资源文档的排序获取最后一个文档数据</td>
<td>db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])</td>
</tr>
</tbody>
</table>
<h3>管道</h3>
<p>MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。</p>
<p>表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。</p>
<ul>
<li>$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。</li>
<li>$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。</li>
<li>$limit:用来限制MongoDB聚合管道返回的文档数。</li>
<li>$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。</li>
<li>$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。</li>
<li>$group:将集合中的文档分组,可用于统计结果。</li>
<li>$sort:将输入文档排序后输出。</li>
<li>$geoNear:输出接近某一地理位置的有序文档。</li>
</ul>
<h4>管道操作符实例</h4>
<p>1、$project实例</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.article.aggregate(
    { $project : {
      title : </span>1<span style="color: rgba(0, 0, 0, 1)"> ,
      author : </span>1<span style="color: rgba(0, 0, 0, 1)"> ,
    }}
);
这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:
db.article.aggregate(
    { $project : {
      _id : 0 ,
      title : </span>1<span style="color: rgba(0, 0, 0, 1)"> ,
      author : </span>1<span style="color: rgba(0, 0, 0, 1)">
    }});</span></pre>
</div>
<p>2.$match实例</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.articles.aggregate( [
                        { $match : { score : { $gt : </span>70, $lte : 90<span style="color: rgba(0, 0, 0, 1)"> } } },
                        { $group: { _id: null, count: { $sum: </span>1<span style="color: rgba(0, 0, 0, 1)"> } } }
                     ] );
$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。</span></pre>
</div>
<p>3.$skip实例</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.article.aggregate(
    { $skip : </span>5<span style="color: rgba(0, 0, 0, 1)"> });
经过$skip管道操作符处理后,前五个文档被</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)">"</span>掉。</pre>
</div>
<p>&nbsp;</p>
<h1>查询分析</h1>
<h2>explain()</h2>
<p>mongo执行计划分析,详细点此处。</p>
<div class="cnblogs_code">
<pre>&gt; db.user.find({<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">name</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)">nick</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">}).explain();
</span>&gt; db.user.find({<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">name</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)">nick</span><span style="color: rgba(128, 0, 0, 1)">"</span>}).explain(true);</pre>
</div>
<p>关键参数详细:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">executionStats.executionSuccess
是否执行成功

executionStats.nReturned
查询的返回条数

executionStats.executionTimeMillis
整体执行时间

executionStats.totalKeysExamined
索引扫描次数

executionStats.totalDocsExamined
document扫描次数</span></pre>
</div>
<p>&nbsp;</p>
<h2>hint()</h2>
<p>使用 hint 来强制 MongoDB 使用一个指定的索引。</p>
<p>这种方法某些情形下会提升性能。 一个有索引的 collection 并且执行一个多字段的查询(一些字段已经索引了)。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">如下查询指定了使用 naem 和 age 索引字段来查询:
</span>&gt; db.user.find({<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">name</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)">nick</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)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span>:18}).hint({<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">name</span><span style="color: rgba(128, 0, 0, 1)">"</span>:1,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span>:1});</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>&nbsp;</h3>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/suoning/p/6759367.html
頁: [1]
查看完整版本: MongoDB数据库