数据库

一个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数据库在内部使用,用于保存分片的相关信息。
创建数据库
user dbname
> 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":"红帽子"}]);

更新文档

update() 和 save() 方法来更新集合中的文档。
update
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 语法小结的更多相关文章

  1. MongoDB使用小结:一些不常见的经验分享

    最近一年忙碌于数据处理相关的工作,跟MongoDB打交道极多,以下为实践过程中的Q&A,后续会不定期更新补充. 另有<MongoDB使用小结:一些常用操作分享>,注:本文完成时Mo ...

  2. MongoDB使用小结:一些常用操作分享

    本文整理了一年多以来我常用的MongoDB操作,涉及mongo-shell.pymongo,既有运维层面也有应用层面,内容有浅有深,这也就是我从零到熟练的历程. MongoDB的使用之前也分享过一篇, ...

  3. mongodb语法备份(转)

    mongodb语法 MongoDB的好处挺多的,比如多列索引,查询时可以用一些统计函数,支持多条件查询,但是目前多表查询是不支持的,可以想办法通过数据冗余来解决多表查询的问题. 查询colls所有数据 ...

  4. MongoDB 语法(转)

    Mongod.exe 是用来连接到mongo数据库服务器的,即服务器端. Mongo.exe 是用来启动MongoDB shell的,即客户端. 其他文件: mongodump 逻辑备份工具. mon ...

  5. Mongodb语法总结

    mongodb与mysql指挥控制 由数据库中的一般传统的关系数据库(database).表(table).记录(record)三个层次概念组成.MongoDB是由数据库(database).集合(c ...

  6. MongoDB语法与现有关系型数据库SQL语法比较

    MongoDB语法            MySql语法 db.test.find({'name':'foobar'})             <==>          select ...

  7. MongoDB 语法使用小结

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的     他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据 ...

  8. Mongodb 语法,update,insert,delete,find

    ---恢复内容开始--- db.Users.update({OrganizationCode:"Global"},{$set:{OrganizationCode:"Fre ...

  9. MongoDB学习小结

    启动对应server:cd:到mangodb安装根目录下 mongod --dbpath db路径 创建MangoDB服务: mongod.exe --logpath d:/mongodb/logs/ ...

随机推荐

  1. 剑指offer-重构二叉树-树-python

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...

  2. ELK-全文检索技术-elasticsearch集群及sde_restful

    1       搭建ES集群 集群的说明 我们计划集群名称为:leyou-elastic,部署3个elasticsearch节点,分别是: node-01:http端口9201,TCP端口9301 n ...

  3. [译]送给 ES6 开发者的7个 hack

    关注原来的 JavaScript hacks,上面有一些新的好东西.2018 使用 JavaScript 写代码真的又变得有意思了! Hack #1 — 交换变量 使用数组结构来交换值 let a = ...

  4. c++ Socket客户端和服务端示例版本三(多线程版本)

    客户端 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/soc ...

  5. JavaEE高级-JPA学习笔记

    *JPA概述 *JPA是什么? - Java Persistence API :用于对象持久化的API - Java EE 5.0平台标准的ORM规范,使得应用程序以统一的方式访问持久化层 - JPA ...

  6. MongoDB入门_MongoDB特色

    1. sql数据库与nosql数据库对比 nosql不支持实时一致性转而支持数据的最终一致性,数据有一定的延迟 redis数据库支持部分事物,而mongodb不支持事物 nosql数据库没有多表联查功 ...

  7. uwsgi支持http长链接

    http1.1支持长链接,而http1.0不支持,所以,在切换http版本号或者升级服务端版本时候,尤其要注意这个造成的影响. 当客户端以http1.1长链接方式连接服务端时,服务端如果不支持1.1, ...

  8. FileUtils (从磁盘下载,从网络下载)

    public class FileUtils { /** * realPath 磁盘路径 D://project/download/ * urlPath 后半部分路径 具体根据业务需求,例如:WEB- ...

  9. Codecombat 游戏攻略(计算机科学三)

    第二关 赋值运算符-=字符串拼串循环语句while // 你可以把字符串连起来,或者把数字连接到字符串. // 一起唱歌,使用字符串连接: // X potions of health on the ...

  10. idea 打包model 为jar包

    1,在项目上鼠标右键 --> Open Module Settings 2, Artifacts --> + --> JAR --> From modules with dep ...