用户风哥 發表於 2021-7-10 20:13:00

MongoDB语法

<h2 id="%E4%B8%80-mongodb%E5%9F%BA%E7%A1%80%E8%AF%AD%E6%B3%95" class="mume-header">一、mongodb基础语法</h2>
<h3 id="11-%E6%95%B0%E6%8D%AE%E5%BA%93" class="mume-header">1.1 数据库</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">、查询数据库:show dbs;
</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">、创建数据库:use mytest;#如果数据库不存在,则会创建数据库,并没有真正创建数据库, 而是插入了一些数据之后, 才会创建数据库和集合
</span><span style="color: rgba(128, 0, 128, 1)">3</span>、删除数据库:db.dropDatabase();</pre>
</div>
<h3 id="12-%E8%A1%A8%E6%93%8D%E4%BD%9C" class="mume-header">1.2 表操作</h3>
<p>1、创建表</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">、显示所有集合(表):show collections;
</span><span style="color: rgba(128, 0, 128, 1)">2</span>、创建集合(表):db.createCollection(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">table5</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)">3</span><span style="color: rgba(0, 0, 0, 1)">、删除所有集合(表):db.dropDatabase();
</span><span style="color: rgba(128, 0, 128, 1)">4</span>、删除某一张集合(表):db.table5.drop();</pre>
</div>
<p>2、创建固定集合(表) 【table6】,整个集合空间大小 6142800 B, 文档最大个数为 10000 个。</p>
<div class="cnblogs_code">
<pre>db.createCollection(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">table6</span><span style="color: rgba(128, 0, 0, 1)">"</span>, { capped : <span style="color: rgba(0, 0, 255, 1)">true</span>, autoIndexId : <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">, size :
   </span><span style="color: rgba(128, 0, 128, 1)">6142800</span>, max : <span style="color: rgba(128, 0, 128, 1)">10000</span> } )</pre>
</div>
<p>3、插入数据,如果表不存在则会自动创建表</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">#插入简单表
db.table1.insertOne(
{
    id:</span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">,
    name:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">测试数据</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
    age:</span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)">
})

db.table1.insert(
{
    id:</span><span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">,
    name:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">测试数据2</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
    age:</span><span style="color: rgba(128, 0, 128, 1)">23</span><span style="color: rgba(0, 0, 0, 1)">
})


#插入复杂表数据
db.table2.insertOne(
{
    id:</span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">,
    name:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">测试数据</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
    age:</span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)">,
    child:[
      {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)">子节点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)">1</span>,name:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">子节点2</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)">1</span>,name:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">子节点3</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">},
    ],
    house:[</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">3号楼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)">3号楼2</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">]
})<br><br>#插入多条<br></span></pre>
<pre>db.table7.insertMany([ { "_id" : 1, "char" : "Brisbane", "class" : "monk", "lvl" : 4 }, { "_id" : 2, "char" : "Eldon", "class" : "alchemist", "lvl" : 3 }, { "_id" : 3, "char" : "Meldane", "class" : "ranger", "lvl" : 3 } ]);</pre>
<pre><span style="color: rgba(0, 0, 0, 1)">&nbsp;</span></pre>
</div>
<h3 id="13-%E6%9B%B4%E6%96%B0" class="mume-header">1.3、更新</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.collection.update(
   </span>&lt;query&gt;<span style="color: rgba(0, 0, 0, 1)">,
   </span>&lt;update&gt;<span style="color: rgba(0, 0, 0, 1)">,
   {
   upsert: </span>&lt;boolean&gt;<span style="color: rgba(0, 0, 0, 1)">,
   multi: </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></pre>
</div>
<p>说明:</p>
<ul>
<li>query : update的查询条件,类似sql update查询内where后面的。</li>
<li>update : update的对象和一些更新的操作符(如<span class="katex"><span class="katex-mathml">,<span class="katex-html"><span class="base"><span class="strut"><span class="mpunct">,inc...)等,也可以理解为sql update查询内set后面的</span></span></span></span></span></span></li>
<li>upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。</li>
<li>multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。<br>writeConcern :可选,抛出异常的级别。</li>


</ul>
<div class="cnblogs_code">
<pre>db.table1.update({id:<span style="color: rgba(128, 0, 128, 1)">1</span>}, {$<span style="color: rgba(0, 0, 255, 1)">set</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>}})</pre>
</div>
<h3 id="14-%E5%88%A0%E9%99%A4" class="mume-header">1.4、删除</h3>
<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)">,
   {
   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></pre>
</div>
<p>说明:</p>
<ul>
<li>query :(可选)删除的文档的条件。</li>
<li>justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。</li>
<li>writeConcern :(可选)抛出异常的级别。</li>
</ul>
<div class="cnblogs_code">
<pre>1、根据条件删除:db.table1.remove({id:<span style="color: rgba(128, 0, 128, 1)">1</span>},<span style="color: rgba(128, 0, 128, 1)">1</span>)<br>2、清空之前的数据:db.table1.remove({})<br>3、删除匹配的多份文档中的第一份文档:db.table1.deleteOne({status:"A"})</pre>
</div>
<h3 id="15-%E7%AE%80%E5%8D%95%E6%9F%A5%E8%AF%A2" class="mume-header">1.5、简单查询</h3>
<div class="cnblogs_code">
<pre>db.collection.find(query, projection)</pre>
</div>
<p>语法说明:</p>
<ul>
<li>query :可选,使用查询操作符指定查询条件</li>
<li>projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">1</span>、查询数据:db.table1.find({id:<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">})
</span><span style="color: rgba(128, 0, 128, 1)">2</span>、查询单条数据:db.table1.findOne({id:<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">})
</span><span style="color: rgba(128, 0, 128, 1)">3</span>、以易读的方式来读取数据:db.table1.find().pretty();</pre>
</div>
<table>
<thead>
<tr><th>操作</th><th>格式</th><th>范例</th><th>类似sql语句</th></tr>
</thead>
<tbody>
<tr>
<td>等于</td>
<td><code>{&lt;key&gt;:&lt;value&gt;}</code></td>
<td>db.col.find({"by":"菜鸟教程"}).pretty()</td>
<td>where by = '菜鸟教程'</td>
</tr>
<tr>
<td>小于</td>
<td><code>{&lt;key&gt;:{$lt:&lt;value&gt;}</code>}</td>
<td>db.col.find({"likes":{$lt:50}}).pretty()</td>
<td>where likes &lt; 50</td>
</tr>
<tr>
<td>小于或等于</td>
<td><code>{&lt;key&gt;:{$lte:&lt;value&gt;}</code>}</td>
<td>db.col.find({"likes":{$lte:50}}).pretty()</td>
<td>where likes &lt;= 50</td>
</tr>
<tr>
<td>大于</td>
<td><code>{&lt;key&gt;:{$gt:&lt;value&gt;}</code>}</td>
<td>db.col.find({"likes":{$gt:50}}).pretty()</td>
<td>where likes &gt; 50</td>
</tr>
<tr>
<td>大于或等于</td>
<td><code>{&lt;key&gt;:{$gte:&lt;value&gt;}</code>}</td>
<td>db.col.find({"likes":{$gte:50}}).pretty()</td>
<td>where likes &gt;= 50</td>
</tr>
<tr>
<td>不等于</td>
<td><code>{&lt;key&gt;:{$ne:&lt;value&gt;}}</code></td>
<td>db.col.find({"likes":{$ne:50}}).pretty()</td>
<td>where likes != 50</td>
</tr>
</tbody>
</table>
<p class="sync-line" data-line="131">&nbsp;</p>
<h3 id="16-%E6%A8%A1%E7%B3%8A%E6%9F%A5%E8%AF%A2or%E6%9F%A5%E8%AF%A2" class="mume-header">1.6、模糊查询&amp;or查询</h3>
<p>模糊查询:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">1</span>、模糊查询:db.table1.find({id:<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)">name</span><span style="color: rgba(128, 0, 0, 1)">"</span>:{ $regex:/XXX/<span style="color: rgba(0, 0, 0, 1)"> }})
</span><span style="color: rgba(128, 0, 128, 1)">2</span>、查询以某字段为开头的文档:db.table1.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>:{$regex:/^XXX/<span style="color: rgba(0, 0, 0, 1)">}})
</span><span style="color: rgba(128, 0, 128, 1)">3</span>、查询以某字段为结尾的文档:db.table1.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>:{$regex:/XXX^/<span style="color: rgba(0, 0, 0, 1)">}})
</span><span style="color: rgba(128, 0, 128, 1)">4</span>、查询忽略大小写:db.table1.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>:{$regex:/XXX/i}}) #i 是其的一个选项,代表忽略大小写的意思。</pre>
</div>
<p>OR查询:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.table1.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()</span></pre>
</div>
<p>子查询:</p>
<p class="sync-line" data-line="151">&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.table2.find({
    $or:[
      {</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">child.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)">子节点1</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)">child.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(0, 0, 0, 1)">}
    ]
});</span></pre>
</div>
<p>&nbsp;</p>
<pre class="language-sql" data-role="codeBlock" data-info="sql"></pre><br><br>
来源:https://www.cnblogs.com/raorao1994/p/14994737.html
頁: [1]
查看完整版本: MongoDB语法