数据库

一个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. P2523 [HAOI2011]Problem c

    传送门 先考虑如何判断无解,设 $sum[i]$ 表示确定的人中,编号大于 $i$ 的人的人数 如果 $sum[i]>n-i+1$ 则无解,进一步考虑设 $f[i][j]$ 表示当前确定完编号大 ...

  2. [VINS]IMU与相机之间旋转量的标定

    VINS-Mono[1]中IMU-Camera外参旋转量\(R_b^c\)的计算方法在他们实验室发的之前的论文有详细讲解[2].视觉利用匹配特征点中的基础矩阵求出相机坐标系下两帧的旋转量\(R_{c_ ...

  3. Excel如何通过关键字模糊匹配查找全称

    打开excel,以其素材为例,通过关键字模糊匹配查找全称.   在公司名下输入公式:=LOOKUP(1,0/FIND(D2,A2:A5),A2:A5),按回车键确定即可.   FIND(D2,A2:A ...

  4. C# 各种加密

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Sec ...

  5. 使用vim打造python-ide

    一.前言 一直希望在linux下进行python开发,但是linux不想启动图形化界面,所以干脆直接用上了万能的VIM,用VIM打造了属于自己的python-IDE 二.插件 标签导航(tagbar和 ...

  6. PAT Advanced 1058 A+B in Hogwarts (20 分)

    If you are a fan of Harry Potter, you would know the world of magic has its own currency system -- a ...

  7. 北京师范大学第十五届ACM决赛-重现赛C Captcha Cracker (字符串模拟)

    链接:https://ac.nowcoder.com/acm/contest/3/C 来源:牛客网 Captcha Cracker 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26 ...

  8. 【leetcode】473. Matchsticks to Square

    题目如下: 解题思路:居然把卖火柴的小女孩都搬出来了.题目的意思是输入一个数组,判断能否把数组分成四个子数组,使得每个子数组的和相等.首先我们可以很容易的求出每个子数组的和应该是avg = sum(n ...

  9. LeetCode--059--螺旋矩阵 II(python)

    效率超级低,但是能过.... class Solution: def generateMatrix(self, n): tR = tC = 0 dR = n-1 dC = n-1 x = [[0 fo ...

  10. reverse/inverse a mapping but with multiple values for each key

    reverse/inverse a mapping but with multiple values for each key multi mappping dictionary , reverse/ ...