mongodb 语法小结
Posted xiaozhuanfeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb 语法小结相关的知识,希望对你有一定的参考价值。
数据库
一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
"show dbs" 命令可以显示所有数据的列表。
执行 "db" 命令可以显示当前数据库对象或集合。
运行"use"命令,可以连接到一个指定的数据库。
> show dbs admin 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数据库在内部使用,用于保存分片的相关信息。
> use test switched to db test > show dbs admin 0.000GB config 0.000GB local 0.000GB
刚刚创建的test并不显示,需要插入数据才可以
> db.test.insert("name":"天王盖地虎") WriteResult( "nInserted" : 1 ) > show dbs admin 0.000GB config 0.000GB local 0.000GB test 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
> db.getName() long > db.getMongo() connection to 127.0.0.1:27017 > db.stats() "db" : "long", "collections" : 2, "views" : 0, "objects" : 102, "avgObjSize" : 51.705882352941174, "dataSize" : 5274, "storageSize" : 49152, "numExtents" : 0, "indexes" : 2, "indexSize" : 49152, "fsUsedSize" : 8530673664, "fsTotalSize" : 19945680896, "ok" : 1 > db.getCollectionNames() [ "col", "mycol" ] > db.version() 4.1.6-385-g671f529
删除数据库
db.dropDatabase()
> use long switched to db long > show dbs admin 0.000GB config 0.000GB local 0.000GB > db.long.insert("name":"Hello") WriteResult( "nInserted" : 1 ) > show dbs admin 0.000GB config 0.000GB local 0.000GB long 0.000GB > db.dropDatabase() "dropped" : "long", "ok" : 1 > show dbs admin 0.000GB config 0.000GB local 0.000GB
创建集合
语法:db.createCollection(name, options)
参数说明:
- name: 要创建的集合名称
- options: 可选参数, 指定有关内存大小及索引的选项
options 可以是如下参数:
> show collections long > db.createCollection("mycol", capped : true, autoIndexId : true, size : ... 6142800, max : 10000 ) "note" : "the autoIndexId option is deprecated and will be removed in a future release", "ok" : 1 > show collections long mycol > db.mycol.count(); 0
查看已有集合
show collections
// 2019/6/14 11:29:18 // Command #1: // show collections; // Execution time: 0.0s // Result: age_totals col collection
查看集合大小
db.col.count();
查看集合所有数据
db.col.find();
删除集合
首先创建集合,然后再删掉,然后再查看所有集合
show collections db.createCollection("weapon",capped:true,autoIndexId:true,size:10,max:100); db.weapon.drop(); show collections;
插入文档(向集合插入数据)
db.weapon.insert("name":"黑切","type":"攻击");
db.weapon.find();
db.weapon.insertOne("attack":"200");
//向指定集合中插入多条文档数据,重复插入 db.weapon.insertMany(["name":"电刀","name":"红帽子"]);
更新文档
db.collection.update(
<query>,
<update>,
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
)
参数说明:
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
这里说明下,如果文档集合有属性是空,可用null查询,如:
db.weapon.find("name":null);
db.weapon.update("name":null,$set:"name":"虚无之刃");
$unset:移除集合中的键值对。
db.weapon.update("name":"虚无之刃",$unset:"attack":"");
Save:方法通过传入的文档来替换已有文档
db.weapon.save( "_id" : ObjectId("5d03352d4cb87ff7d914c5f6"), "name" : "虚无之刃","type":"暴击" );
注意:MongoDB 不支持 ACID 所以得自己处理。防止并发访问导致问题的思路是:
- 加锁
- 访问数据
- 解锁
保持数据不重复其他的方法:
(1)使用符合索引唯一标识:db.collection.ensureIndex( user: 1, title: 1, Bank: 1 , unique:true )
db.weapon.ensureIndex("name":1,unique:true);
再次插入结果:
(2)db.collection.update(<query>,<update>,upset:true);
db.weapon.update("name":"冰霜之槌",$set:"type":"攻击");
WriteResult( "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 )
db.weapon.update("name":"冰霜之槌",$set:"type":"攻击",upsert:true);
WriteResult( "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : ObjectId("5d0348d7d1fea6c6ed487c27"))
删除文档:
MongoDB remove()函数是用来移除集合中的数据。
在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。
现在官方推荐使用 deleteOne() 和 deleteMany() 方法
db.collection.remove(
<query>,
justOne: <boolean>,
writeConcern: <document>
)
参数说明:
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别。
db.weapon.remove("name":"电刀");
WriteResult( "nRemoved" : 1 )
注意:remove() 方法 并不会真正释放空间,删除collection内的数据不会释放磁盘空间;
//-----查看磁盘空间使用情况 db.serverStatus().mem //释放空间 db.runCommand(compact: collection-name, force: true )
deleteOne() 和 deleteMany()
db.weapon.deleteOne("name":"电刀");
查询文档
以上是关于mongodb 语法小结的主要内容,如果未能解决你的问题,请参考以下文章