企鹅社区禁止说实话 發表於 2019-8-9 16:22:00

【MongoDB学习之二】MongoDB数据库、文档、集合、元数据

<p>环境<br>          MongoDB 4.0<br>          CentOS6.5_x64</p>
<p>一、连接<br>语法格式:</p>
<div class="cnblogs_code">
<pre>mongodb:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[?options]]</span></pre>
</div>
<p>参考:MongoDB 连接</p>
<p>二、数据库</p>
<p>1、show dbs:命令可以显示所有数据的列表<br>2、db:命令可以显示当前数据库对象或集合。<br>3、use:如果数据库不存在,则创建数据库,否则切换到指定数据库。</p>
<p>4、db.dropDatabase() 删除当前数据库</p>
<div class="cnblogs_code">
<pre># ./<span style="color: rgba(0, 0, 0, 1)">mongo
...
</span>&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
config </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;<span style="color: rgba(0, 0, 0, 1)"> db
test
</span>&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;<span style="color: rgba(0, 0, 0, 1)"> use wjy
switched to db wjy
</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> db
wjy</span></pre>
</div>
<p>保留数据库:</p>
<p>admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。<br>local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合<br>config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。</p>
<p>&nbsp;</p>
<p>三、集合</p>
<p>1、查询当前数据库中所有的集合(表)&nbsp;</p>
<p>show collections&nbsp;</p>
<p>2、显式创建collection:&nbsp;</p>
<p>db.createCollection(‘collectionName’)&nbsp;</p>
<p>3、隐式创建collection(插入数据前创建):&nbsp;</p>
<p>db.collectionName.insert(document);&nbsp;</p>
<p>4、删除collection:&nbsp;</p>
<p>db.collectionName.drop() ,&nbsp;</p>
<p>5、统计Collection中文档数量:&nbsp;</p>
<p>db.collectionName.count();</p>
<div class="cnblogs_code">
<pre>&gt;<span style="color: rgba(0, 0, 0, 1)"> use test
switched to db test
</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> db
test
</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> show collections
</span>&gt; db.createCollection(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">cols</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)">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;<span style="color: rgba(0, 0, 0, 1)"> show collections
cols
</span>&gt; db.cols.insert({title: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">MongoDB 教程</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
...   description: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">MongoDB 是一个 Nosql 数据库</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
...   by: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">w3cschool</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
...   url: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">http://www.w3cschool.cn</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
...   tags: [</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">mongodb</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)">database</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)">NoSQL</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">],
...   likes: </span><span style="color: rgba(128, 0, 128, 1)">100</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;<span style="color: rgba(0, 0, 0, 1)"> db.cols.count()
</span><span style="color: rgba(128, 0, 128, 1)">1</span>
&gt;<span style="color: rgba(0, 0, 0, 1)"> db.cols.drop()
</span><span style="color: rgba(0, 0, 255, 1)">true</span>
&gt;<span style="color: rgba(0, 0, 0, 1)"> show collections
</span>&gt;</pre>
</div>
<p>&nbsp;</p>
<p>四、文档</p>
<p>1、新增</p>
<p>(1)增加单个文档。</p>
<div class="cnblogs_code">
<pre>&gt; db.user.insert({name:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">will</span><span style="color: rgba(128, 0, 0, 1)">"</span>,age:<span style="color: rgba(128, 0, 128, 1)">17</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;<span style="color: rgba(0, 0, 0, 1)"> show collections
user</span></pre>
</div>
<p>(2)增加单个文档,并指定_id。&nbsp;</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre>&gt; db.user.insert({_id:<span style="color: rgba(128, 0, 128, 1)">22</span>,name:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">will</span><span style="color: rgba(128, 0, 0, 1)">"</span>,age:<span style="color: rgba(128, 0, 128, 1)">17</span>,gender:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">boy</span><span style="color: rgba(128, 0, 0, 1)">"</span>,email:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">will@itsource.cn</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> })</pre>
</div>
<p>(3)增加多个文档。</p>
<div class="cnblogs_code">
<pre>&gt;<span style="color: rgba(0, 0, 0, 1)"> db.user.insert([
... {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>,age:<span style="color: rgba(128, 0, 128, 1)">17</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>,age:<span style="color: rgba(128, 0, 128, 1)">18</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>,age:<span style="color: rgba(128, 0, 128, 1)">19</span><span style="color: rgba(0, 0, 0, 1)">}
... ])
BulkWriteResult({
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">writeErrors</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)">writeConcernErrors</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)">nInserted</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nUpserted</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nMatched</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nModified</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nRemoved</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">upserted</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.count()
</span><span style="color: rgba(128, 0, 128, 1)">5</span>
&gt;</pre>
</div>
<p>注意:db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据</p>
<p>&nbsp;</p>
<p>2、更新操作</p>
<p>语法:&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.collection.update(
   </span>&lt;criteria&gt;<span style="color: rgba(0, 0, 0, 1)">,
   </span>&lt;objNew&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>&nbsp;</p>
<p>criteria : update的查询条件,类似sql update查询内where后面的。</p>
<p>objNew : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的</p>
<p>upsert : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。</p>
<p>multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新&nbsp;</p>
<p>writeConcern :可选,抛出异常的级别。</p>
<p>&nbsp;</p>
<p>(1)只更新第一条记录:</p>
<p>db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );</p>
<p>(2)全部更新:</p>
<p>db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );</p>
<p>(3)只添加第一条:</p>
<p>db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );</p>
<p>(4)全部添加进去:</p>
<p>db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );</p>
<p>&nbsp;</p>
<p>3、删除操作</p>
<p>语法:&nbsp;</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)">,
   {
   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>query :(可选)删除的文档的条件。</p>
<p>justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。</p>
<p>writeConcern :(可选)抛出异常的级别。</p>
<p>(1)删除user集合中_id属性值为9527的文档 。</p>
<p>db.user.remove({_id:9527});&nbsp;</p>
<p>(2)删除user集合中gender属性为boy的文档(默认删除多条数据)。</p>
<p>db.user.remove({gender:"boy"});&nbsp;</p>
<p>(4)删除user集合中gender属性为girl的文档,只删除1行。</p>
<p>db.user.remove({gender:"boy"},true);</p>
<p>(4)清空所有,类似truncate</p>
<p>db.user.remove({})</p>
<p>&nbsp;</p>
<p>4、查询操作</p>
<p>语法:&nbsp;</p>
<p>db.collection.find(query, projection)</p>
<p>query :可选,使用查询操作符指定查询条件</p>
<p>projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。</p>
<p>db.col.find().pretty():pretty() 方法以格式化的方式来显示所有文档。</p>
<p>(1)查询所有user集合中文档的数据。&nbsp;</p>
<p>db.user.find();</p>
<p>(2)查询user集合中所有的gender属性 (_id属性默认总是查出来)。&nbsp;</p>
<p>db.user.find({},{gender:true});</p>
<p>(3)查询user集合中所有的gender属性,且不查询_id属性。&nbsp;</p>
<p>db.user.find({},{_id:false,gender:true});</p>
<p>(4)查询user集合中所有gender属性值为boy的文档中的name属性。&nbsp;</p>
<p>db.user.find({gender:"boy"},{_id:false,name:true});</p>
<p>(5)查询user集合中所有gender属性值为boy并且年龄大于等于17的文档中的name属性。</p>
<p>db.user.find({gender:"boy",age:{$gte:17}},{_id:false,name:true,age:true});</p>
<p>官方最新版本增删改查操作文档</p>
<p>&nbsp;</p>
<p>五、元数据</p>
<p>1、系统的命名空间<br>数据库的信息是存储在集合中。它们使用了系统的命名空间:dbname.system.*<br>在MongoDB数据库中名字空间 &lt;dbname&gt;.system.* 是包含多种系统信息的特殊集合(Collection),如下:<br>集合命名空间        描述<br>dbname.system.namespaces        列出所有名字空间。<br>dbname.system.indexes        列出所有索引。<br>dbname.system.profile        包含数据库概要(profile)信息。<br>dbname.system.users        列出所有可访问数据库的用户。<br>dbname.local.sources        包含复制对端(slave)的服务器信息和状态。<br>对于修改系统集合中的对象有如下限制。<br>在{{system.indexes}}插入数据,可以创建索引。但除此之外该表信息是不可变的(特殊的drop index命令将自动更新相关信息)。<br>{{system.users}}是可修改的。 {{system.profile}}是可删除的。</p>
<p>2、MongoDB 数据类型<br>String        字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。<br>Integer        整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。<br>Boolean        布尔值。用于存储布尔值(真/假)。<br>Double        双精度浮点值。用于存储浮点值。<br>Min/Max keys        将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。<br>Array        用于将数组或列表或多个值存储为一个键。<br>Timestamp        时间戳。记录文档修改或添加的具体时间。<br>Object        用于内嵌文档。<br>Null        用于创建空值。<br>Symbol        符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。<br>Date        日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。<br>Object ID        对象 ID。用于创建文档的 ID。<br>Binary Data        二进制数据。用于存储二进制数据。<br>Code        代码类型。用于在文档中存储 JavaScript 代码。<br>Regular expression        正则表达式类型。用于存储正则表达式。</p>
<p>&nbsp;</p>
<p>六、MongoDB客户端工具-MongoVUE</p>
<p>MongoVUE下载</p>
<p>MongoVUE使用</p>
<p>其他常用的MongoDB客户端管理工具</p>
<p>清单一</p>
<p>清单二</p>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    学习技术不是用来写HelloWorld和Demo的,而是要用来解决线上系统的真实问题的.<br><br>
来源:https://www.cnblogs.com/cac2020/p/11328053.html
頁: [1]
查看完整版本: 【MongoDB学习之二】MongoDB数据库、文档、集合、元数据