IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【MongoDB---学习小结】 -> 正文阅读

[大数据]【MongoDB---学习小结】

一、MongoDB简介

1、NoSQL:非关系型数据库。

  • NoSQL 有时也称作 Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
  • NoSQL 用于超大规模数据的存储。(例如谷歌、Facebook 每天为他们的用户
    收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

2、什么是 MongoDB?

  • MongoDB是NoSQL的典型代表,用于web的大容量的数据存储。
  • MongoDB 是由 C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。
  • MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
  • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
  • MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

3、常用的术语

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

4、数据库

一个 mongodb 中可以建立多个数据库。MongoDB 的默认数据库为"db",该数据库存储在 data 目录中。MongoDB 的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

"show dbs"// 命令可以显示所有数据库的列表。

数据库也通过名字来标识。数据库名可以是满足以下条件的任意 UTF-8 字符串。

  • 不能是空字符串(“”)。
  • 不得含有’ '(空格)、.、$、/、\和\0 (空字符)。
  • 应全部小写。
  • 最多 64字节。

5、文档

需要注意的是:

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

文档键命名规范:

(1) 键不能含有\0 (空字符)。这个字符用来表示键的结尾。
(2) .和$有特别的意义,只有在特定环境下才能使用。
(3) 以下划线"_"开头的键是保留的,例如:默认的主键_id.(不是严格要求的)

6、集合

  • 集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
  • 集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

??比如,我们可以将以下不同数据结构的文档插入到集合中
在这里插入图片描述当第一个文档插入时,集合就会被创建。

合法的集合名

  • 集合名不能是空字符串""。
  • 集合名不能含有\0 字符(空字符),这个字符表示集合名的结尾。
  • 集合名不能以"system."开头,这是为系统集合保留的前缀。
  • 用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。

7、MongoDB 数据类型

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

二、MongoDB的基本操作

1、db:是MongoDB的默认数据库。

用户可以创建多个数据库。

2、创建数据库

use DATABASE_NAME

3、删除数据库

db.dropDatabase()
db //db这个命令可以查看当前数据库名字是啥

4、创建集合(表)

db.createCollection(name, options)

在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。

db.mycol2.insert({"name" : "张三"})
show collections

5、删除集合(表)

db.集合名.drop()

如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false

6、插入文档

db.COLLECTION_NAME.insert(document)

insert(): 若插入的数据主键已经存在,则会抛org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。

3.2 版本后还有以下几种语法可用于插入文档:

  • db.collection.insertOne():向指定集合中插入一条文档数据
  • db.collection.insertMany():向指定集合中插入多条文档数据
# 插入单条数据
var document = db.collection.insertOne({"a": 3}) 

# 插入多条数据
var res = db.collection.insertMany([{"b": 3}, {'c': 4}])

7、查询文档

(1)查询操作符

查询操作符说明
$lt小于
$gt大于
$or
$in表示某个集合中
$size用来统计记录数
$all表示所有

(2)常用函数:

常用函数说明
sort({字段:1/-1})1表示升序,-1表示降序
distinct(字段)表示某个字段的覆盖范围
limit()分页查询

??举个例子:
前提:创建集合为classes,如下所示

db.createCollection("classes");

// ----------------------------
// Documents of classes
// ----------------------------
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa23b7f0ca97d65028f909"),
    name: "乔峰",
    age: NumberInt("28"),
    sex: "男",
    hobby: [
        "足球",
        "武术",
        "乒乓球"
    ]
} ]);
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa23b7f0ca97d65028f90c"),
    name: "段誉",
    age: NumberInt("25"),
    sex: "男",
    hobby: [
        "舞蹈",
        "武术",
        "篮球"
    ]
} ]);
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa24a9f0ca97d65028f934"),
    name: "虚竹",
    age: NumberInt("23"),
    sex: "男",
    hobby: [
        "舞蹈",
        "化妆",
        "游泳"
    ]
} ]);
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa24a9f0ca97d65028f937"),
    name: "令狐冲",
    age: NumberInt("25"),
    sex: "男",
    hobby: [
        "喝酒",
        "武术",
        "爬山"
    ]
} ]);
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa24a9f0ca97d65028f93a"),
    name: "任盈盈",
    age: NumberInt("23"),
    sex: "女",
    hobby: [
        "舞蹈",
        "化妆",
        "武术"
    ]
} ]);
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa24a9f0ca97d65028f93d"),
    name: "向问天",
    age: NumberInt("32"),
    sex: "男",
    hobby: [
        "武术",
        "喝酒",
        "足球"
    ]
} ]);
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa24a9f0ca97d65028f940"),
    name: "灵儿",
    age: NumberInt("12"),
    sex: "女",
    hobby: [
        "舞蹈",
        "计算机",
        "游泳",
        "看书"
    ]
} ]);
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa24fdf0ca97d65028f952"),
    name: "阿宝",
    age: NumberInt("8"),
    sex: "男",
    hobby: [
        "舞蹈",
        "画画",
        "游泳"
    ]
} ]);
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa26b6f0ca97d65028f99e"),
    name: "小明",
    age: NumberInt("8"),
    sex: "男",
    hobby: [
        "跆拳道",
        "二胡",
        "游泳"
    ]
} ]);
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa26b6f0ca97d65028f9a1"),
    name: "小明",
    age: NumberInt("8"),
    sex: "男",
    hobby: [
        "跆拳道",
        "画画"
    ]
} ]);
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa26b6f0ca97d65028f9a4"),
    name: "小红",
    age: NumberInt("9"),
    sex: "女",
    hobby: [
        "乒乓球",
        "唱歌",
        "游泳",
        "画画"
    ]
} ]);
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa26b6f0ca97d65028f9a7"),
    name: "田娃",
    age: NumberInt("11"),
    sex: "男",
    hobby: [
        "跑步",
        "计算机",
        "画画"
    ]
} ]);
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa26b6f0ca97d65028f9aa"),
    name: "嘎子",
    age: NumberInt("12"),
    sex: "男",
    hobby: [
        "跆拳道",
        "二胡",
        "游泳"
    ]
} ]);
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa2733f0ca97d65028f9c2"),
    name: "小王",
    age: NumberInt("10"),
    sex: "男",
    hobby: [
        "读书",
        "二胡"
    ]
} ]);
db.getCollection("classes").insert([ {
    _id: ObjectId("60fa2733f0ca97d65028f9c5"),
    name: "小李",
    age: NumberInt("12"),
    sex: "男",
    hobby: [
        "画画",
        "读书",
        "羽毛球",
        "爬山"
    ]
} ]);

查找语句如下:

db.getCollection('classes').find({})
//查询年龄为8岁的人员信息
db.classes.find({age:8})
//查询年龄大于10岁的信息
db.classes.find({age:{$gt:10})
//查询年龄在8-12岁信息
db.classes.find({age:{$in:[8,9,10,11,12]}})
//查看年龄8岁且喜欢画画的男生信息
db.classes.find({age:8,hobby:'画画',sex:'男'})
//查看年龄小于8岁或者大于12岁的人员信息
db.classes.find({$or:[{age:{$lt:8}},{age:{$gt:12}}]})
//查看年龄9岁或者11岁的学生
db.classes.find({$or:[{age:9},{age:11}]})
//查找右两个兴趣的学生
db.classes.find({hobby:{$size:2}})
//查找喜欢计算机的学生
db.classes.find({hobby:'计算机'})
//查找既喜欢画画有喜欢跳舞的学生
db.classes.find({hobby:'画画',hobby:'跳舞'})
db.classes.find({hobby:{$all:['画画''跳舞']}})
//查找班级中年龄第二大的同学
db.classes.find().sort({age:-1})[1]
//查询班级同学兴趣爱好所覆盖的范围
db.classes.distinct('hobby')
//查找班级年龄中年龄最小的三位同学
db.classes.find().sort({age:1}).limit(3)

8、更新文档

(1)updateOne():更新一条记录

更新操作符说明
$set设置新的值
$push追加一个内容
$pushAll追加多个内容
$addToSet增加内容并且设置增加的条件
$each用于查找。和$addToSet联合使用时表示若存在则不添加,若不存在则添加
$inc用于字段值的增加
$unset删除某个字段
$pop删除某个字段的第一个值

(2)updateMany():更新所有记录

更新语句如下:

//更新操作
//(1)将小红年龄改为8岁,兴趣爱好改成跳舞画画
db.classes.updateOne({name:'小红'},{$set:{age:8,hobby:['跳舞','画画']}})
db.classes.find({name:'小红'})
//(2)追加小明的兴趣爱好
db.classes.find({name:'小明'})
db.classes.updateOne({name:'小明'},{$push:{hobby:'唱歌'}})
//(3)给小王的爱好的爱好增加吹牛和打篮球多个爱好
db.classes.updateOne({name:'小王'},{$pushAll:{hobby:['吹牛','打篮球']}}})
db.classes.find({name:'小王'})
//(4)小李兴趣要增加跑步唱歌,但是不能和已有的一样
db.classes.find({name:'小李'})
db.classes.updateOne({name:'小李'},{$addToSet:{$each:['跑步','唱歌']}}})
//(5)班级中的所有人年龄加1
db.classes.updateMany({},{$inc:{age:1}})
db.classes.find({})
//(6)删除小明的sex属性
db.classes.updateOne({name:'小明'},{$unset:{sex:""}})
db.classes.find({name:'小明'})
//(7)小李第一个兴趣爱好不要了
db.classes.updateOne({name:'小李'},{$pop:{hobby:-1}})    
//(8)给小王增加一个域:备注:{民族:”回族“,习俗:”不吃猪肉“}
db.classes.find({name:'小王'})
db.classes.updateOne({name:'小王'},{$set:{备注:{民族:'回族',习俗:'不吃猪肉'}}})
//(9)修改小王的备注域,增加项:宗教:‘伊斯兰教’
db.classes.updateOne({name:'小王'},{$Set:{宗教:'伊斯兰教'}}})

9、删除文档

(1)deleteMany():删除所有记录

(2)deleteOne():删除某个记录

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:30:00  更:2022-07-17 16:30:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:49:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码