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' });
相关推荐
STLearner18 分钟前
ICML 2026 | LLM×Graph论文总结[1]【图基础模型,文本属性图,多模态属性图,图对齐,图提示学习,关系深度学习
论文阅读·人工智能·python·深度学习·学习·机器学习·数据挖掘
泰晶科技36 分钟前
【前装供应链实操笔记:车规晶振背后AEC-Q100与Q200的绑定关系】
笔记
神明不懂浪漫1 小时前
【第四章】CSS(二)——文本外观属性与复合选择器
前端·css·经验分享·笔记
什巳2 小时前
JAVA练习278- 和为 K 的子数组
java·学习·算法·leetcode
碎光拾影2 小时前
CPU与MCU核心区别揭秘
单片机·学习·51单片机
栈溢出了4 小时前
Redis 分片集群与哈希槽笔记
java·redis·笔记·spring
我命由我123454 小时前
复利极简理解
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
AOwhisky5 小时前
Python 学习笔记(第三期)——流程控制核心知识点自测与详解
开发语言·笔记·python·学习·云原生·运维开发·流程控制
tyqtyq225 小时前
药品说明书解读 —— AI 安全用药助手,鸿蒙原生应用深度解析
人工智能·学习·华为·生活·harmonyos
小心亦新6 小时前
STM32学习13 定时器1中断
stm32·嵌入式硬件·学习