一、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术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins   表连接,MongoDB不支持
primary key primary 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

MongoDB存储基础教程相关推荐

  1. Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程

    Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程 原文:Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程 Asp.Net Cor ...

  2. Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一)

    图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core Web Api实现图片上传存储以及生成缩略图呢?今天我就使用MongoDB作为图片存储 ...

  3. iOS教程:Core Data数据持久性存储基础教程

    目录[-] 创建Core Data工程 创建数据模型 测试我们的数据模型 来看看SQL语句的真面目 自动生成的模型文件 创建一个表视图 之后看些什么? 就像我一直说的,Core Data是iOS编程, ...

  4. Mongodb最基础入门教程

    Mongodb最基础入门教程 如果想了解一下redis的入门教程,可以去看一下我的上一篇博客 Mongodb的安装大家可以参考一下其他博主的博客,这里我就不做介绍了.不过值得注意的是,在Linux版本 ...

  5. Spring Cloud Alibaba基础教程:Sentinel Dashboard同步Apollo存储规则

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 在之前的两篇教程中我们分别介绍了如何将Sentinel的限流规则存储到Nacos和Apollo中.同时 ...

  6. Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 上一篇我们介绍了如何通过Nacos的配置功能来存储限流规则.Apollo是国内用户非常多的配置中心,所 ...

  7. Spring Cloud Alibaba基础教程:Sentinel使用Nacos存储规则

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 通过上一篇<使用Sentinel实现接口限流>的介绍,相信大家对Sentinel已经有了初 ...

  8. MongoDB基础教程系列--目录结构

     MongoDB基础教程系列--目录结构

  9. 网络存储 linux 访问,Linux基础教程学习笔记28——使用Samba访问网络存储

    Linux基础教程学习笔记28--使用Samba访问网络存储 SMB用于Windows和类Linux系统直接的文件共享 安装samba client包: [root@linuxidc~]# yum i ...

最新文章

  1. I need to follow my heart.
  2. 用 ffmpeg + m3u8-segment 将h264的ES流转换成m3u8的过程记录
  3. oracle 11g 1033,ORACLE出现错误1033和错误ORA-00600的解决方法
  4. LeetCode 23. Merge k Sorted Lists
  5. adb linux 权限更改,使用命令chmod修改android文件权限
  6. PHP使用单例模式进行连接DB:public的方法进行调用连接函数即可
  7. SQL SERVER逆向工程将数据库导入PowerDesigner
  8. jsp导出数据时离开页面_您应该在要离开的公司开始使用数据
  9. IT人不要一辈子靠技术生存(转)
  10. 不使用临时变量的swap再思考 -- 六种解法
  11. lie group and computer vision : 李群、李代数在计算机视觉中的应用
  12. 《html5 从入门到精通》读书笔记(三)
  13. php怎么写编辑页面,怎样编辑小程序页面内容?
  14. SAS︱数据索引、数据集常用操作(set、where、merge、append)
  15. R用户的福音︱TensorFlow:TensorFlow的R接口
  16. 商场收银系统服务器安装在哪里,收银系统安装教程
  17. 上海道宁联合德国think-cell,为您提供更便捷高效的PowerPoint插件
  18. java speex_JAVA版-微信语音.speex转.wav(示例代码)
  19. Linux安装Tab键补全功能
  20. JZOJ 6841. 【2020.11.5提高组模拟】淘淘蓝蓝之树林(凸包+最短路)

热门文章

  1. 2019-04(1)(Python学习)
  2. [LevelDB] 写批处理过程详解
  3. Java 中Thread的sleep、join、yield方法解析
  4. 18.8.20 考试总结
  5. Django知识总结(一)
  6. abp的权限与导航菜单的关系
  7. 每天一个linux命令(1):ln 命令
  8. Ios tab Bar 使用方法
  9. coreleft函数
  10. LOG与DOG的关系