MongoDB学习笔记

文章目录

  • [1.MongoDB 简介](#1.MongoDB 简介)
    • [MongoDB 为什么特别适合爬虫](#MongoDB 为什么特别适合爬虫)
  • [2.安装 MongoDB](#2.安装 MongoDB)
  • [3.MongoDB CRUD 操作](#3.MongoDB CRUD 操作)

1.MongoDB 简介

MongoDB是一个基于分布式 文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展高性能数据存储解决方案。

它的最大特点是:

  • 特别适合存储大量的无结构无规则的数据
  • 单表实现存储PB级别的数据,但读写效率仍然不输MySQL

它的限制:

  • 不支持SQL、不支持连表查询、不支持事务
  • 不支持高度优化的查询方式

MongoDB 为什么特别适合爬虫

  • 减少后端开发的负担
  • 爬虫爬取大量数据抓取之后储存下来,数据规则和结构是随机

2.安装 MongoDB

MongoDB官网,选择 需要安装的环境版本进行安装

安装流程参考这篇文章 MongoDB 安装使用

安装好的本地MongoDB默认运行地址http://localhost:27017/

3.MongoDB CRUD 操作

创建操作

创建插入操作用于将新文档添加到集合中。如果集合当前不存在,插入操作会创建集合。

_id 字段:在 MongoDB 中,存储在集合 中的每个文档 都需要一个唯一的 _id 字段作为主键 。如果插入的文档省略了 _id 字段,MongoDB 驱动程序会自动为 ObjectId 字段生成一个 _id

1.Collection.insertOne() 将 单个 文档 插入到集合中。insertOne() 返回提供 的 Promise。

javascript 复制代码
await db.collection('inventory').insertOne({
  item: 'canvas',
  qty: 100,
  tags: ['cotton'],
  size: { h: 28, w: 35.5, uom: 'cm' }
});

2.Collection.insertMany() 可将 多个 文档 插入到一个集合中。将文档数组传递给该方法。insertMany() 返回提供 的 Promise。

javascript 复制代码
await db.collection('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' }
  }
]);

查询文档

1.选择集合中的所有文档

javascript 复制代码
const cursor = db.collection('inventory').find({});

2.选择集合所有 status 等于 "D" 的文档

javascript 复制代码
const cursor = db.collection('inventory').find({ status: 'D' });

3.使用查询操作符指定条件。从 inventory 集合中检索所有文档。其中 status 等于 "A" 或 "D"

javascript 复制代码
const cursor = db.collection('inventory').find({
  status: { $in: ['A', 'D'] }
});

4.指定 AND 条件。复合查询可以为集合文档中的多个字段指定条件。

以下示例检索 inventory 集合中 status 等于 "A" 且qty 小于 ($lt) 30 的所有文档:

javascript 复制代码
const cursor = db.collection('inventory').find({
  status: 'A',
  qty: { $lt: 30 }
});

5.匹配嵌入式/嵌套文档

以下查询会选择字段 size 等于文档 { h: 14, w: 21, uom: "cm" } 的所有文档:

javascript 复制代码
const cursor = db.collection('inventory').find({
  size: { h: 14, w: 21, uom: 'cm' }
});

6.在嵌套字段上指定相等匹配项

以下示例会选择嵌套在 size 字段中的 uom 字段等于 "in" 的所有文档:

javascript 复制代码
const cursor = db.collection('inventory').find({
  'size.uom': 'in'
});

更新文档

更新操作符

1.更新单份文档。使用 Collection.updateOne() 方法

在inventory 集合上更新 item等于 的 第一个"paper" 文档):

javascript 复制代码
await db.collection('inventory').updateOne(
  { item: 'paper' },
  {
    $set: { 'size.uom': 'cm', status: 'P' },
    $currentDate: { lastModified: true }
  }
);
  • 使用 $set 操作符将 size.uom 字段的值更新为 "cm",并将 status 字段的值更新为 "P",
  • 使用 $currentDate 操作符将 lastModified 字段的值更新为当前日期。如果 lastModified 字段不存在,则 $currentDate 将创建该字段。

2.更新多个文档。使用 Collection.updateMany() 方法

(位于inventory 集合上)以更新qty 小于50 的所有文档:

javascript 复制代码
await db.collection('inventory').updateMany(
  { qty: { $lt: 50 } },
  {
    $set: { 'size.uom': 'in', status: 'P' },
    $currentDate: { lastModified: true }
  }
);

3.替换文档。要替换文档中除 字段之外的全部内容,请将全新文档作为第二个参数传递给_id Collection.replaceOne()

如下示例将替换 第一个 集合中的inventory文档,其中的 item: "paper":

javascript 复制代码
await db.collection('inventory').replaceOne(
  { item: 'paper' },
  {
    item: 'paper',
    instock: [
      { warehouse: 'A', qty: 60 },
      { warehouse: 'B', qty: 40 }
    ]
  }
);

删除文档

1.删除所有文档。请将空 筛选器 文档 传递给{} Collection.deleteMany() 方法。

如下示例将删除 所有 集合中的inventory文档:

javascript 复制代码
await db.collection('inventory').deleteMany({});

2.删除符合条件的所有文档。请将 筛选器 参数传递给 deleteMany() 方法。

javascript 复制代码
await db.collection('inventory').deleteMany({ status: 'A' });

3.仅删除一个符合条件的文档。请使用 Collection.deleteOne() 方法。

javascript 复制代码
await db.collection('inventory').deleteOne({ status: 'D' });
相关推荐
Invinciblenuonuo5 分钟前
FreeRTOS学习笔记【10】-----任务上下文切换
笔记·学习
好奇龙猫6 分钟前
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(11): てあります。
学习
美味的大香蕉23 分钟前
Spark-SQL与Hive
笔记
_Hello_Panda_28 分钟前
FX10(CYUSB4014)USB3.2(10Gbps)开发笔记分享(1):硬件设计与开发环境搭建
笔记·fpga开发·fx10·cyusb4014
2501_915373881 小时前
Node.js 学习入门指南
学习·node.js
绵绵细雨中的乡音1 小时前
Linux进程学习【基本认知】
linux·运维·学习
时间之城2 小时前
笔记:记一次使用EasyExcel重写convertToExcelData方法无法读取@ExcelDictFormat注解的问题(已解决)
java·spring boot·笔记·spring·excel
灏瀚星空2 小时前
用Obsidian四个插件打造小说故事关联管理系统:从模板到图谱的全流程实践
经验分享·笔记·开源
一只可爱的小猴子2 小时前
2022李宏毅老师机器学习课程笔记
人工智能·笔记·机器学习
孞㐑¥2 小时前
C++11介绍
开发语言·c++·经验分享·笔记