MongoDB存储基础教程

一、MongoDB简介

  1. mangodb是一种基于分布式、文件存储的非关系型数据库
  2. C++写的,性能高
  3. 为web应用提供可扩展的高性能数据存储解决方案
  4. 所支持的格式是json格式

二、MongoDB三元素&和关系型数据库的区别

  三元素:数据库  集合(类似关系型数据库的表)  文档(类似关系型数据库中的行)

  文档:就是一个对象,由键值对构成{"name":"zhangsan","age":33}

  集合:类似于数据库中的表,储存多个文档,结构不固定
    {"name":"zhangsan","age":33}
    {"name":"zhangsan","age":33}
    {"book":"python","price":33}
  数据库:是一个集合的物理容器,一个数据库可以包含多个文档

 

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins 表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

三、MongoDB自带的数据库

admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。
local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
test:MongoDB的默认数据库是test。 如果没有创建任何数据库,那么集合将被保存在测试数据库。

四、MongoDB数据库命令

  mongod 开启服务器
  mongo 开启客户端


  show dbs 显示所有数据库列表
  db 显示当前数据库对象/集合
  use 连接到一个指定的数据库;如果数据库不存在,会被创建。
  db.dropDatabase() 删除选定的数据库

  注意:show dbs要显示数据库,需要插入一个文档进去。

五、集合(表)的创建

  MongoDB中使用db.createCollection(name,option)用来创建集合
    name 是要创建集合的名称。
    option 用于指定集合的配置,(可选)指定有关内存大小和索引选项

  db.createCollection("myconllection") 创建集合
  show collections 检查创建的集合
  db.COLLECTION_NAME.drop() 删除集合 : db.myconllection.drop()

  在MongoDB中可以不创建集合,当插入一些文档的时候MongoDB会自动创建集合。

六、文档(一行记录)

  文档是一组键值对。MongoDB不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大区别,也是MongoDB的特点。

  文档中的键/值对是有序的。
  文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
  MongoDB区分类型和大小写。
  MongoDB的文档不能有重复的键。
  文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

七、MongoDB中的数据类型

数据类型描述
String字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean布尔值。用于存储布尔值(真/假)。
Double双精度浮点值。用于存储浮点值。
Min/Max keys将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Array用于将数组或列表或多个值存储为一个键。
Timestamp时间戳。记录文档修改或添加的具体时间。
Object用于内嵌文档。
Null用于创建空值。
Symbol符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID对象 ID。用于创建文档的 ID。
Binary Data二进制数据。用于存储二进制数据。
Code代码类型。用于在文档中存储 JavaScript 代码。
Regular expression正则表达式类型。用于存储正则表达式。

八、文档的插入

MongoDB中使用insert()和save()方法向集合中插入文档,语法如下:

db.collection_name.insert()db.mycol.insert({_id: 1,title: 'MongoDB Overview',description: 'MongoDB is no sql database',by: 'weiheng',url: 'http://www.weiheng.site',tags: ['mongodb', 'database', 'NoSQL'],likes: 1,})

如果不指定_id参数,那么 MongoDB 会为此文档分配一个唯一的ObjectId。

ObjectId的生成规则:_id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)

要在集合中插入多个文档,可以在insert()命令中传递文档数组:

db.mycollection.insert([{"_id":2,"title":"MongoDB Overview","descrption":"MongoDB is no sql database","by":"weiheng","url":"http://www.weiheng.site","likes":1,},{"_id":3,"title":"MongoDB Overview","descrption":"MongoDB is no sql database","by":"weiheng","url":"http://www.weiheng.site","likes":1,},])

db.collection_name.insertOne()

将单个文档插入集合中,该方法返回包含新插入文档的_id.

db.inventory.insertOne({item: "canvas",qty: 100,tags: ["cotton"],size: { h: 28, w: 35.5, uom: "cm"}}
)

返回结果

db.inventory.insertOne(...    { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }... ){"acknowledged" : true,"insertedId" : ObjectId("5955220846be576f199feb55")}

db.collection_name.insertMany()

方法将多个文档插入到集合中,可将一系列文档传递给它。insertMany()返回包含新插入的文档_id字段值的文档。

db.inventory.insertMany([{ item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },{ item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },{ item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }])

返回结果

db.inventory.insertMany([
... { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
... { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
... { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
... ])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("59552c1c46be576f199feb56"),
ObjectId("59552c1c46be576f199feb57"),
ObjectId("59552c1c46be576f199feb58")
]
}

九、MongoDB文档的查询

要从MongoDB集合中查询数据,需要使用MongoDB的find()方法

find()命令基本语法:

db.collection_name.find(document)

find()会以非结构化的方式显示所有文档内容:

{ "_id" : ObjectId("5b5eb4d81cec3f1204a88699"), "id" : 1, "title" : "MongoDB Overview", "descrption" : "MongoDB is no sql database", "by" : "weiheng", "url" : "http://www.weiheng.site", "likes" : 1 }{ "_id" : 2, "title" : "MongoDB Overview", "descrption" : "MongoDB is no sql database", "by" : "weiheng", "url" : "http://www.weiheng.site", "likes" : 1 }{ "_id" : 3, "title" : "MongoDB Overview", "descrption" : "MongoDB is no sql database", "by" : "weiheng", "url" : "http://www.weiheng.site", "likes" : 1 }{ "_id" : 4, "title" : "MongoDB Overview", "descrption" : "MongoDB is no sql database", "by" : "weiheng", "url" : "http://www.weiheng.site", "likes" : 1 }

pretty():格式化数据并显示结果:

db.collection_name.find().pretty(){"_id" : ObjectId("5b5eb4d81cec3f1204a88699"),"id" : 1,"title" : "MongoDB Overview","descrption" : "MongoDB is no sql database","by" : "weiheng","url" : "http://www.weiheng.site","likes" : 1}

除了find()还有findOne()它只会返回一个文档;默认返回第一个:

findOne()语法:

db.collenction_name.findOne()

十、条件操作&比较运算符

操作            语法                            示例                                                RDBMS等效语句
相等            {<key>:<value>}                db.mycol.find({"by":"weiheng"}).pretty()        where by = 'weiheng'
小于            {<key>:{$lt:<value>}}        db.mycol.find({"likes":{$lt:50}}).pretty()        where likes < 50
小于等于         {<key>:{$lte:<value>}}        db.mycol.find({"likes":{$lte:50}}).pretty()        where likes <= 50
大于            {<key>:{$gt:<value>}}        db.mycol.find({"likes":{$gt:50}}).pretty()        where likes > 50
大于等于        {<key>:{$gte:<value>}}        db.mycol.find({"likes":{$gte:50}}).pretty()        where likes >= 50
不等于          {<key>:{$ne:<value>}}        db.mycol.find({"likes":{$ne:50}}).pretty()        where likes != 50

(1) 在find()中,如果将条件以,分割,则MongoDB将其视为AND操作

db.mycol.find({$and: [{key1: value1}, {key2:value2}]})# by为weiheng,title为MongoDB Overview的文章db.mycollection.findOne({$and:[{"by":"weiheng"},{"title":"MongoDB Overview"}]})

(2) MongoDB中的OR操作符。基本语法和AND相同

db.mycol.find({$or: [{key1: value1}, {key2:value2}]})db.mycollection.findOne({$or:[{"by":"weiheng"},{"title":"MongoDB Overview"}]})

(3) AND和OR

db.mycol.find({key:value,$or: [{key1: value1}, {key2:value2}]})

 十一、update()更新操作

MongoDB中使用Update将集合中的文档进行更新,update()方法更新现有文档中的值,而save()方法使用save()方法中传递的文档数据替换现有文档。

update语法:

db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA)

示例:修改id为1的title

// 查看id:1的信息
db.mycollection.find({'id':1}){ "_id" : ObjectId("5b5eb4d81cec3f1204a88699"), "id" : 1, "title" : "MongoDB Overview", "descrption" : "MongoDB is no sql database", "by" : "weiheng", "url" : "http://www.weiheng.site", "likes" : 1 }// 修改一下title为MongoDBdb.mycollection.update({'id':1},{"$set":{"title":"MongoDB"}})
// 再次查询
db.mycollection.find({'id':1}){ "_id" : ObjectId("5b5eb4d81cec3f1204a88699"), "id" : 1, "title" : "MongoDB", "descrption" : "MongoDB is no sql database", "by" : "weiheng", "url" : "http://www.weiheng.site", "likes" : 1 }

 

十二、remove() & deleteOne() & deleteMany() 删除操作

MongoDB中的 remove()方法用于从集合中删除文档。(官方不推荐使用remove(),推荐deleteOne和deleteMany())

remove()方法的基本语法如下:

db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)

示例: 删除id为1的数据

// 以下示例将删除_id为“100”的文档。
db.mycollection.remove({'id':1})

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

db.inventory.deleteMany({title: "MongoDB" })
db.inventory.deleteOne({title: "MongoDB" })

 

转载于:https://www.cnblogs.com/weihengblog/p/9392276.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat的带有守护程序和关闭挂钩的正常关闭

我的最后两个博客讨论了长时间轮询和Spring的DeferredResult技术&#xff0c;并且为了展示这些概念&#xff0c;我将我的Producer Consumer项目中的代码添加到了Web应用程序中。 尽管该代码演示了博客所提出的观点&#xff0c;但其逻辑上确实包含大量漏洞。 除了在实际的应用程…

java 递归从子节点删除父节点_LeetCode450. 删除二叉搜索树中的节点

删除一个二叉搜索树中的节点&#xff0c;需要进行情况的分类讨论&#xff0c;看一下将这个节点删除之后是否需要对二叉搜索树进行调整&#xff08;为了保持树的连接和维持二叉搜索树的性质&#xff09;。&#xff08;1&#xff09;如果删除的是一个叶子节点&#xff0c;那问题不…

1. [文件]- 文件类型,文件open模式

1.文件类型&#xff1a;文本文件和二进制文件 硬盘中的文件保存为01010101格式&#xff0c;一般读取文件是把文件从硬盘中读取到内存中。 文本文件需要进行格式转换才能读取出来。二进制文件一般用于传输二进制文件&#xff1a;视频图片 2.文件打开模式 几种不同的读取和遍历文…

c语言鼠标移动响应,CSS鼠标响应事件经过、移动、点击示例介绍

几种鼠标触发CSS事件。说明&#xff1a;onMouseDown 按下鼠标时触发onMouseOver 鼠标经过时触发onMouseUp 按下鼠标松开鼠标时触发onMouseOut 鼠标移出时触发onMouseMove 鼠标移动时触CSS 鼠标响应事件.Off{ background-color: #00FF66; padding:100px;}.up{background-color: …

node安装node-sass失败,配置淘宝源

node-sass 安装失败的原因是因为无法下载 .node 文件&#xff0c;解决办法就很简单了&#xff0c;就是我们把文件下载路径复制一份到浏览器里&#xff0c;然后使用浏览器下载文件就可以了。 具体方法 1.从node命令行中复制 .node文件下载链接并在浏览器打开下载文件https:/…

django 日志配置

django 日志配置 LOGGING { version: 1, disable_existing_loggers: False, formatters: { standard: { format: %(levelname)s %(asctime)s %(pathname)s %(filename)s %(funcName)s %(lineno)d: %(message)s }, # INFO 2016-09-03 16:25:20,067 /home/ubuntu/mysite/views.p…

带有Atomikos示例的Tomcat中的Spring JTA多个资源事务

在本教程中&#xff0c;我们将向您展示如何使用Atomikos Transaction Manager在Tomcat服务器中实现JTA多个资源事务。 Atomicos事务管理器为分布式事务提供支持。 这些是多阶段事务&#xff0c;通常使用多个数据库&#xff0c;必须以协调的方式提交。 分布式事务由XA standard描…

mac vs 返回上一步_mac电脑打不开应用程序的解决方法

mac电脑跟windows电脑一样&#xff0c;经常会出现打不开应用程序的情况&#xff0c;并且提示“因为它来自身份不明的开发者”&#xff0c;也不知道哪里出现问题&#xff1f;由于MAC系统与windows界面不一样&#xff0c;很多小编不懂怎么操作&#xff1f;为此&#xff0c;小编给…

C#DES加密

记录一下 DES加密 public static string DESEncrypt(string Data, string key){return DESEncrypt(Data, key, "utf-8");}/// <summary>/// DES加密算法/// </summary>/// <param name"Data">加密明文</param>/// <param name&…

c语言链表有没有哨兵的区别,链表中的哨兵(sentinel)

哨兵节点广泛应用于树和链表中&#xff0c;如伪头、伪尾、标记等&#xff0c;它们是纯功能的&#xff0c;通常不保存任何数据&#xff0c;其主要目的是使链表标准化&#xff0c;如使链表永不为空、永不无头、简化插入和删除。问题&#xff1a;删除链表中等于给定值val的所有节点…

jquery 获取标签名(tagName)

如果是为了取到tagName后再进行判断&#xff0c;那直接用下面的代码会更方便&#xff1a; $(element).is(input) 如果是要取到标签用作到别的地方&#xff0c;可以使用一下代码&#xff1a; $(element)[0].tagName或&#xff1a;$(element).get(0).tagName 转载请注明&#xff…

番石榴条纹类的细粒度并发

这篇文章将介绍如何使用Guava中的Striped类来实现更细粒度的并发。 ConcurrentHashMap使用条带化锁定方法来增加并发性&#xff0c;并且Striped类通过赋予我们具有条带化Locks &#xff0c; ReadWriteLocks和Semaphores的能力来扩展此主体。 当访问对象或数据结构&#xff08;例…

iOS-----------关于组件化

打一个比较形象的比喻&#xff0c;把APP比作我们的人体&#xff0c;把胳膊、大腿、心、肝、肺这些人体器官比作组件&#xff0c;各个器官分别负责他们各自的功能&#xff0c;但是他们之间也有主次之分&#xff0c;试想我们的胳膊、大腿等是不能独立完成某个任务的&#xff0c;必…

scrapy 安装

直接命令pip install scrapy安装&#xff0c;提示失败 Failed building wheel for Twisted... Microsoft Visual C 14.0 is required...等等 网上搜索一大摞windows下安装scrapy的资料&#xff0c;实践后终于大功告成&#xff0c;现分享出来 1.首先下载scrapy的whl包&#xff1…

leetcode 罗马数字转整数

罗马数字包含以下七种字符&#xff1a;I&#xff0c;V&#xff0c;X&#xff0c;L&#xff0c;C&#xff0c;D 和M。 字符数值I1V5X10L50C100D500M1000例如&#xff0c; 罗马数字 2 写做II &#xff0c;即为两个并列的 1。12 写做XII &#xff0c;即为 X II 。 27 写做 XXVII, …

android 自定义switch控件,Android中switch自定义样式

android 原生开关按钮控件 Switch 提供样式自定义方式&#xff0c;可供我们修改为适合我们开发使用的样式控件&#xff0c;自定义样式过程如下:自定义switch切换drawable新建swith_thumb.xml文件自定义switch轨道drawable新建switch_track.xmln文件,轨迹如果在选中与否过程并没…

具有瞬态属性的视图对象的钝化和激活

在应用程序模块的钝化/激活周期内&#xff0c;框架也会钝化并激活视图对象。 通常&#xff0c;框架保存有关VO状态&#xff0c;当前行&#xff0c;绑定变量值等的信息。 但是没有数据。 激活视图对象后&#xff0c;将重新执行VO的查询&#xff0c;并重新获取数据。 在大多数情况…

jsonobject修改key的值_JSON字符串操作移除空串更改key/value的介绍

对于JSON字符串的操作。移除键值、添加属性。//删除JSON对象value值var json[.....];delete(json[key]);或者delete(json.key);//添加对象objectjson.objectvalue;或者json[object]value;如果数据是查询数据库得到的&#xff0c;那么可能会存在空值&#xff0c;for循环JSON数据…

pre标签的样式

你可能正在使用 <pre> 标签。这是一个 HTML 中非常特别的标签&#xff0c;它允许其中的空格真正显示出来。例如&#xff1a;四个空格将真实显示成四个空格。这不同于其他标签通常的做法&#xff0c;其他标签会将之间的空白压缩成一个。从这一点来说&#xff0c;<pre&g…

从Hotspot JIT编译器打印生成的汇编代码

有时&#xff0c;在对Java应用程序进行性能分析时&#xff0c;有必要了解Hotspot JIT编译器生成的汇编代码。 这对于确定已做出的优化决策以及我们的代码更改如何影响生成的汇编代码非常有用。 在调试并行算法以确保已按预期应用可见性规则时&#xff0c;知道何时发出什么指令也…