【MongoDb入门】15分钟让你敢说自己会用MongoDB了
一.MongDB是什么呢,我该如何下手呢?
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
如果小伙伴你的机器上还没有安装MongoDb的话请快快去安装吧,下载地址:https://www.mongodb.com/download-center#community,如果下载慢的话,我也是没有办法了呢。
我使用的可视化界面是Robo,<>https://robomongo.org/download,这个下载还是比较快的,安装也是非常简单,直接next一路到底,最后设置一个连接配置。
如果你已经安装成功了,请快快和我学习MongDB的命令吧。
二.正文
大家不要认为MongoDb和平时的数据库不同,其关系如下表
SQL术语 | MongoDB | 解释 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
对数据的操作如下
show collections #查看数据库中的表
show dbs #查看该服务器上所有的数据库
show users #查询
se admin #切换数据库
db.help(); #显示数据库操作命令,里面有很多的命令
db.foo.help(); 当前数据库的帮助
db.foo.find(); #not where
db.foo.find({a:1}) #条件是数据中有一个属性叫a,且a的值为1
实际上这个foo,代表你当前的数据库。
创建数据库操作如下
use demo; #创建数据库
db; #切换当前数据库
show dbs #检查数据库
db.test.insert({"_id":"520","name","xiaoming"}) #创建表+数据
db.dropDatabase() #删除数据库
为什么你在这里可以不通过创建集合可以直接创建数据库呢,那是因为MongoDb的机制是,让你创建文档的时候,如果你没有集合,那就直接给你创建集合了。
创建集合操作如下
db.creatCollection("ccname") #ccname同dbname一样为自己剪的集合
db.creatCollection("ccname",{capped:true,autoIndexID:true,size:10000,max:10000})
其参数表如下:
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔 | 固定集合的大小,如果值为true时必须也指定size |
autoindexid | 布尔 | 如果为true,自动创建_id字段索引 |
size | 数值 | 设置集合的大小 |
max | 数值 | 指定固定集合中包含文档的最大数量 |
删除集合:
db.ccname.drop()
其中通过createCollection创建表返回{"ok":1.0}表示成功,删除为true则成功;
文档的ADD:
db.zaraList.insert({'name':'zara','age':18})
db.zaraList.find()
或者你可以定义一个变量
abc = ({'name':'zara','age':18}) db.zaraList.insert(abc)
结果:
/* 1 */
{
"_id" : ObjectId("5bf8b297ac045dc7d0a20b2c"),
"name" : "zara",
"age" : 18.0
}
id自动给我们加密了,是不是非常的炫酷。
文档的Delete:
db.zaraList.remove({'name':'zara'})#删除所有name=李华的文档
db.zaraList.remove({'name':'zara'},{justOne:1})#删除一条name=李华的文档
聪明的小伙伴,现在绝对想到了,刚才我们插入的id是个加密的了,那我们怎么删除它呢?
db.zaraList.remove({"_id":ObjectId("5bf8b297ac045dc7d0a20b2c")})
一些方法:
db.collection.remove() | 删除单个文档或与指定过滤器匹配的所有文档。 |
db.collection.deleteOne() |
即使多个文档可能与指定的过滤器匹配,也最多删除与指定过滤器匹配的单个文档。3.2新版功能。 |
db.collection.deleteMany() |
删除所有匹配指定过滤条件的文档。3.2新版功能。 |
需要注意的是remove() 方法已经过时了,现在官方推荐使用 deleteOne() 和 deleteMany() 方法。
如删除集合下全部文档:
db.inventory.deleteMany({})
删除 status 等于 A 的全部文档:
db.inventory.deleteMany({ status : "A" })
删除 status 等于 D 的一个文档:
db.inventory.deleteOne( { status: "D" } )
为什么不推荐呢,好像是因为一个释放的东西,每次remove的时候都需要 db.repairDatabase() 来回收磁盘空间。
>db.repairDatabase()
或者
> db.runCommand({ repairDatabase: 1 })
文档的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 :可选,抛出异常的级别。
我们在ZaraList中先多插个数据(实际上偷偷的插了几条):
接着我们通过update去更新下这个title吧。
db.zara.update({'title':'zara说MongoDb'},{$set:{'title':'该吃了呢'}})
为什么只更新第一个符合的呢,这个时候multi 就派上用场了;则需要设置 multi 参数为 true。
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
如果你没用可视化窗口,那可能查出来的数据是一行一行的,你可以通过格式化进行整合美观点。
db.zara.find().pretty()
文档的Select
语法:db.collection.find(query, projection)
参数解析:
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
and写法:
db.col.find({key1:value1, key2:value2}).pretty()
Or写法:
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
and 和 or 联合使用
db.col.find({"likes": {$gt:50}, $or: [{"by": "zara"},{"title": "MongoDB"}]}).pretty()
三.写到最后(不是大牛就不可以写博客了吗?)
你不是大牛就更应该写博客,无论你是开发还是运维测试,都是搞技术的,技术发展的很快,难道学完就丢了,过明天在拾起来?你不像那些大牛看看官方文档在自己动动手就可以懂原理的人,你就更没有理由不写博客了。
【MongoDb入门】15分钟让你敢说自己会用MongoDB了的更多相关文章
- 非关系型数据库MongoDB入门
本文分为以下四块简单介绍非关系型数据库MongoDB:1.MongoDB简介.2.MongoDB和关系数据库对比.3.MongoDB基本概念.4.mongo shell的使用以及对MongoDB的增删 ...
- MongoDB入门简介
MongoDB入门简介 http://blog.csdn.net/lolinzhang/article/details/4353699 有关于MongoDB的资料现在较少,且大多为英文网站,以上内容大 ...
- MongoDB入门必读(概念与实战并重)
MongoDB入门必读(概念与实战并重) 一.概述 MongoDB是一个基于分布式文件存储的数据库开源项目.由C++语言编写.旨在为WEB应用提供可护展的高性能数据存储解决方案. MongoDB是一个 ...
- 15 分钟学会 Eclipse GMF
背景 坦白说:过去在 Eclipse 里使用 Graphical Editor Framework(GEF)创建图形化编辑器 既慢又痛苦.这个过程包括理解复杂的框架和大量的冗余代码.但也说明 GEF ...
- 15分钟学会使用Git
http://blog.csdn.net/u013510614/article/details/50588446 主体思想 Git作为一个复杂的版本控制系统,命令之多,相信很多小白已经望而却步,有的尝 ...
- mongoDB 入门手册
MongoDB - 简介 官网:https://www.mongodb.com/ MongoDB 是一个基于分布式文件存储的数据库,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储 ...
- 15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码)
15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码) 前言 设计模式是一个程序员进阶高级的必备技巧,也是评判一个工程师工作经验和能力的试金石.设计模式是程序员多年工作经 ...
- 15分钟从零开始搭建支持10w+用户的生产环境(二)
上一篇文章,把这个架构的起因,和操作系统的选择进行了详细说明. 原文地址:15分钟从零开始搭建支持10w+用户的生产环境(一) 二.数据库的选择 对于一个10W+用户的系统,数据库选择很重要. 一 ...
- 15分钟从零开始搭建支持10w+用户的生产环境(三)
上一篇文章介绍了这个架构中,选择MongoDB做为数据库的原因,及相关的安装操作. 原文地址:15分钟从零开始搭建支持10w+用户的生产环境(二) 三.WebServer 在SOA和gRPC大行其 ...
随机推荐
- 关于<Servlet>定义
1,百度百科定义: Servlet,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容 ...
- Extjs在树上加右键菜单--2019-04-15
效果图如下: 使用规则:将监听加到按钮或树上,监听代码如下. 代码如下: listeners : { //节点单击事件 'rowcontextmenu' : function(view, record ...
- java 基本数据类型的取值
一. 1.基本类型:short 二进制位数:16 包装类:java.lang.Short 最小值:Short.MIN_VALUE=-32768 (-2的15此方)最大值:Short.MAX_VALUE ...
- Sublime Text3 & MinGW & LLVM CLang 安装配置C-C++编译环境
Sublime Text是一款强大的跨平台代码编辑器,小巧而且丰富实用的功能是Visual Studio不能比拟的,但是编译运行是一个软肋,本文通过在sublime中配置g++编译器实现程序的编译功能 ...
- linux shell 发送qq邮件失败
安装 发送邮件功能 yum -y install postfix yum -y install mailx 使用 mail -s “fsfds” @qq.com < hh 第二次返回此信息 您在 ...
- input type='file' 上传文件 判断图片的大小是否合格与witdh 和 height 是否合格
function CheckFiles(obj) { var array = new Array('gif', 'jpeg', 'png', 'jpg'); //可以上传的文件类型 if (obj.v ...
- github错误:fatal: remote origin already exists.
原文链接:http://blog.csdn.net/dengjianqiang2011/article/details/9260435 如果输入$ Git remote add origin git@ ...
- 我们来谈谈最近最热门的微信小程序
最近微信小程序真是火到不行,我们的经理大人也就此给我做了一定的培训.他讲的太好,我实在忍不住跟大家简单分享一下: 1.什么是微信小程序? 一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦 ...
- Java之hashCode的作用和equals方法的重构规则
这个是博主对hashcode的初步理解,以后加深了会再来更新: 1.hashcode是什么? hashcode是对象的散列码,不同的对象几乎不一样,说几乎是因为还是可以一样的. 特点:每一个对象都有h ...
- Java-IO流之转换流的使用和编码与解码原理
一.理论: 1.字符流和字节流区别是什么? 字符流=字节流+编码集,在实际读取的时候其实字符流还是按照字节来读取,但是会更具编码集进行查找编码集字典解析相应的字节,使得一次读取出一个字符: 2.什么是 ...