当前位置:Gxlcms > 数据库问题 > mongodb 语法小结

mongodb 语法小结

时间:2021-07-01 10:21:17 帮助过:11人阅读

0.000GB config 0.000GB local 0.000GB > db admin > use local switched to db local > show users > use admin switched to db admin > use local switched to db local > db local

数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。

  • 不能是空字符串("")。
  • 不得含有‘ ‘(空格)、.、$、/、\和\0 (空字符)。
  • 应全部小写。
  • 最多64字节。

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

  • admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  • local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  • config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
创建数据库 user dbname
  1. ><span style="color: #000000;"> use test
  2. switched to db test
  3. </span>><span style="color: #000000;"> show dbs
  4. admin </span>0<span style="color: #000000;">.000GB
  5. config </span>0<span style="color: #000000;">.000GB
  6. local </span>0.000GB

刚刚创建的test并不显示,需要插入数据才可以

  1. > db.test.insert({"name":"天王盖地虎"<span style="color: #000000;">})
  2. WriteResult({ </span>"nInserted" : 1<span style="color: #000000;"> })
  3. </span>><span style="color: #000000;"> show dbs
  4. admin </span>0<span style="color: #000000;">.000GB
  5. config </span>0<span style="color: #000000;">.000GB
  6. local </span>0<span style="color: #000000;">.000GB
  7. test </span>0.000GB

> show dbs    -- 查看数据库列表

> use admin   --创建admin数据库,如果存在admin数据库则使用admin数据库

> db   ---显示当前使用的数据库名称

> db.getName()  ---显示当前使用的数据库名称

> db.dropDatabase()  --删当前使用的数据库

> db.repairDatabase()  --修复当前数据库

> db.version()   --当前数据库版本

> db.getMongo()  --查看当前数据库的链接机器地址 

> db.stats() 显示当前数据库状态,包含数据库名称,集合个数,当前数据库大小 ...

> db.getCollectionNames()   --查看数据库中有那些个集合(表)

> show collections    --查看数据库中有那些个集合(表)

> db.person.drop()  --删除当前集合(表)person

  1. ><span style="color: #000000;"> db.getName()
  2. </span><span style="color: #0000ff;">long</span>
  3. ><span style="color: #000000;"> db.getMongo()
  4. connection to </span>127.0.0.1:27017
  5. ><span style="color: #000000;"> db.stats()
  6. {
  7. </span>"db" : "long"<span style="color: #000000;">,
  8. </span>"collections" : 2<span style="color: #000000;">,
  9. </span>"views" : 0<span style="color: #000000;">,
  10. </span>"objects" : 102<span style="color: #000000;">,
  11. </span>"avgObjSize" : 51.705882352941174<span style="color: #000000;">,
  12. </span>"dataSize" : 5274<span style="color: #000000;">,
  13. </span>"storageSize" : 49152<span style="color: #000000;">,
  14. </span>"numExtents" : 0<span style="color: #000000;">,
  15. </span>"indexes" : 2<span style="color: #000000;">,
  16. </span>"indexSize" : 49152<span style="color: #000000;">,
  17. </span>"fsUsedSize" : 8530673664<span style="color: #000000;">,
  18. </span>"fsTotalSize" : 19945680896<span style="color: #000000;">,
  19. </span>"ok" : 1<span style="color: #000000;">
  20. }
  21. </span>><span style="color: #000000;"> db.getCollectionNames()
  22. [ </span>"col", "mycol"<span style="color: #000000;"> ]
  23. </span>><span style="color: #000000;"> db.version()
  24. </span>4.1.6-385-g671f529

删除数据库

db.dropDatabase()

  1. > use <span style="color: #0000ff;">long</span><span style="color: #000000;">
  2. switched to db </span><span style="color: #0000ff;">long</span>
  3. ><span style="color: #000000;"> show dbs
  4. admin </span>0<span style="color: #000000;">.000GB
  5. config </span>0<span style="color: #000000;">.000GB
  6. local </span>0<span style="color: #000000;">.000GB
  7. </span>> db.<span style="color: #0000ff;">long</span>.insert({"name":"Hello"<span style="color: #000000;">})
  8. WriteResult({ </span>"nInserted" : 1<span style="color: #000000;"> })
  9. </span>><span style="color: #000000;"> show dbs
  10. admin </span>0<span style="color: #000000;">.000GB
  11. config </span>0<span style="color: #000000;">.000GB
  12. local </span>0<span style="color: #000000;">.000GB
  13. </span><span style="color: #0000ff;">long</span> 0<span style="color: #000000;">.000GB
  14. </span>><span style="color: #000000;"> db.dropDatabase()
  15. { </span>"dropped" : "long", "ok" : 1<span style="color: #000000;"> }
  16. </span>><span style="color: #000000;"> show dbs
  17. admin </span>0<span style="color: #000000;">.000GB
  18. config </span>0<span style="color: #000000;">.000GB
  19. local </span>0.000GB

创建集合

语法:db.createCollection(name, options)

参数说明:

  • name: 要创建的集合名称
  • options: 可选参数, 指定有关内存大小及索引的选项

options 可以是如下参数:

技术图片

  1. ><span style="color: #000000;"> show collections
  2. </span><span style="color: #0000ff;">long</span>
  3. > db.createCollection("mycol", { capped : <span style="color: #0000ff;">true</span>, autoIndexId : <span style="color: #0000ff;">true</span><span style="color: #000000;">, size :
  4. ... </span>6142800, max : 10000<span style="color: #000000;"> } )
  5. {
  6. </span>"note" : "the autoIndexId option is deprecated and will be removed in a future release"<span style="color: #000000;">,
  7. </span>"ok" : 1<span style="color: #000000;">
  8. }
  9. </span>><span style="color: #000000;"> show collections
  10. </span><span style="color: #0000ff;">long</span><span style="color: #000000;">
  11. mycol
  12. </span>><span style="color: #000000;"> db.mycol.count();
  13. </span>0

查看已有集合

show collections

  1. <span style="color: #008000;">//</span><span style="color: #008000;"> 2019/6/14 11:29:18
  2. </span><span style="color: #008000;">//</span><span style="color: #008000;"> Command #1:
  3. </span><span style="color: #008000;">//</span><span style="color: #008000;"> show collections;
  4. </span><span style="color: #008000;">//</span><span style="color: #008000;"> Execution time: 0.0s
  5. </span><span style="color: #008000;">//</span><span style="color: #008000;"> Result:</span>
  6. <span style="color: #000000;">age_totals
  7. col
  8. collection</span>

查看集合大小

  1. db.col.count();

查看集合所有数据

  1. db.col.find();

技术图片

删除集合

首先创建集合,然后再删掉,然后再查看所有集合

  1. <span style="color: #000000;">show collections
  2. db.createCollection(</span>"weapon",{capped:<span style="color: #0000ff;">true</span>,autoIndexId:<span style="color: #0000ff;">true</span>,size:10,max:100<span style="color: #000000;">});
  3. db.weapon.drop();
  4. show collections;</span>

插入文档(向集合插入数据)

  1. db.weapon.insert({"name":"黑切","type":"攻击"<span style="color: #000000;">});
  2. db.weapon.find();</span>

技术图片

  1. db.weapon.insertOne({"attack":"200"});

技术图片

  1. <span style="color: #008000;">//</span><span style="color: #008000;">向指定集合中插入多条文档数据,重复插入</span>
  2. db.weapon.insertMany([{"name":"电刀"},{"name":"红帽子"}]);

技术图片

更新文档

update() 和 save() 方法来更新集合中的文档。 update
  1. <span>db.collection.update(
  2. <query><span>,
  3. <update><span>,
  4. {
  5. upsert: <boolean><span>,
  6. multi: <boolean><span>,
  7. writeConcern: <document><span>
  8. }
  9. )</span></span></span></span></span></span>

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

 这里说明下,如果文档集合有属性是空,可用null查询,如:

  1. db.weapon.find({"name":<span style="color: #0000ff;">null</span>});
  1. db.weapon.update({"name":<span style="color: #0000ff;">null</span>},{$set:{"name":"虚无之刃"}});

技术图片

$unset:移除集合中的键值对。

  1. db.weapon.update({"name":"虚无之刃"},{$unset:{"attack":""}});

技术图片

Save:方法通过传入的文档来替换已有文档

  1. db.weapon.save({ "_id" : ObjectId("5d03352d4cb87ff7d914c5f6"), "name" : "虚无之刃","type":"暴击" });

技术图片

注意:MongoDB 不支持 ACID 所以得自己处理。防止并发访问导致问题的思路是:

  • 加锁
  • 访问数据
  • 解锁

 保持数据不重复其他的方法:

(1)使用符合索引唯一标识:db.collection.ensureIndex( { user: 1, title: 1, Bank: 1 }, {unique:true} )

  1. db.weapon.ensureIndex({"name":1},{unique:<span style="color: #0000ff;">true</span>});

再次插入结果:

技术图片

(2)db.collection.update(<query>,<update>,{upset:true});

  1. db.weapon.update({"name":"冰霜之槌"},{$set:{"type":"攻击"}});

 

  1. <span><span class="fctbNone">WriteResult({ </span><span class="fctbStyle2">"nMatched"</span><span class="fctbNone"> : </span><span class="fctbStyle3">0</span><span class="fctbNone">, </span><span class="fctbStyle2">"nUpserted"</span><span class="fctbNone"> : </span><span class="fctbStyle3">0</span><span class="fctbNone">, </span><span class="fctbStyle2">"nModified"</span><span class="fctbNone"> : </span><span class="fctbStyle3">0</span><span class="fctbNone"> })</span></span>
  1. db.weapon.update({"name":"冰霜之槌"},{$set:{"type":"攻击"}},{upsert:<span style="color: #0000ff;">true</span>});

 

  1. <span><span class="fctbNone">WriteResult({ </span><span class="fctbStyle2">"nMatched"</span><span class="fctbNone"> : </span><span class="fctbStyle3">0</span><span class="fctbNone">, </span><span style="background-color: #ffcc00;"><span class="fctbStyle2">"nUpserted"</span><span class="fctbNone"> : </span><span class="fctbStyle3">1</span></span><span class="fctbNone">, </span><span class="fctbStyle2">"nModified"</span><span class="fctbNone"> : </span><span class="fctbStyle3">0</span><span class="fctbNone">, </span><span class="fctbStyle2">"_id"</span><span class="fctbNone"> : ObjectId(</span><span class="fctbStyle2">"5d0348d7d1fea6c6ed487c27"</span><span class="fctbNone">)})</span></span>

 删除文档:

MongoDB remove()函数是用来移除集合中的数据。

在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。

现在官方推荐使用 deleteOne() 和 deleteMany() 方法

  1. <span class="pln">db<span class="pun">.<span class="pln">collection<span class="pun">.<span class="pln">remove<span class="pun">(<span class="pln">
  2. <span class="str"><query><span class="pun">,<span class="pln">
  3. <span class="pun">{<span class="pln">
  4. justOne<span class="pun">:<span class="pln"> <span class="str"><boolean><span class="pun">,<span class="pln">
  5. writeConcern<span class="pun">:<span class="pln"> <span class="str"><document><span class="pln">
  6. <span class="pun">}<span class="pln">
  7. <span class="pun">)</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
  • writeConcern :(可选)抛出异常的级别。
  1. db.weapon.remove({"name":"电刀"});

 WriteResult({ "nRemoved" : 1 })

注意:remove() 方法 并不会真正释放空间,删除collection内的数据不会释放磁盘空间;

  1. <span style="color: #008000;">//</span><span style="color: #008000;">-----查看磁盘空间使用情况</span>
  2. <span style="color: #000000;"> db.serverStatus().mem
  3. </span><span style="color: #008000;">//</span><span style="color: #008000;">释放空间</span>
  4. db.runCommand({compact: collection-name, force: <span style="color: #0000ff;">true</span> })

 deleteOne() 和 deleteMany() 

  1. db.weapon.deleteOne({"name":"电刀"});

查询文档

 待续。。。

mongodb 语法小结

标签:repair   抛出异常   通过   png   collect   pac   date()   mon   ensure   

人气教程排行