MongoDB 操作(CRUD) 教程—官方原版

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB 操作(CRUD) 教程—官方原版

一、概述

CRUD 操作新增、读取、更新和删除 文件。

新增操作

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

在MongoDB中,插入操作以单个集合为目标。MongoDB中的所有写操作都是单个文档级别的原子操作。

读取操作

读取操作检索文件从收集;即查询集合 文件。MongoDB提供了以下方法来读取文档 一个集合:

• db.collection.find()

更新操作

更新操作修改现有文件在一个收集.

在MongoDB中,更新操作针对单个集合。全部写入 MongoDB中的操作是原子在单个文档的级别上。

您可以指定条件或筛选器,以标识要标识的文档 更新。这些过滤 器使用相同的 语法作为读取操作。

删除操作

删除操作从集合中删除文档。

在MongoDB中,删除操作针对单个收集.都 MongoDB中的写入操作是原子在单个文档的级别上。

您可以指定条件或筛选器,以标识要标识的文档 删除。这些过滤 器使用相同的 语法作为读取操作。

批量写入

MongoDB提供了批量执行写入操作的能力。

二、插入文档

1、插入单个文档

db.collection.insertOne()插入单个 公文到集合中。

下面的示例在集合中插入一个新文档。如果文档未指定 一个字段,MongoDB 将字段添加为 新文档的 ObjectId 值。看inventory_id_id插入行为。

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

insertOne()返回包含新插入文档的_id字段值的文档。有关返回文档的示例,请参阅db.collection.insertOne()引用。

要检索刚刚插入的文档,请查询集合:

db.inventory.find( { item: "canvas" } )

2、插入多个文档

db.collection.insertMany()可以将多个文档插入到集合中。将文档数组传递给该方法。

以下示例将三个新文档插入到库存集合中。如果文档没有指定_id字段,MongoDB会向每个文档添加带有ObjectId值的_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" } }
])

三、查询文档

本页提供了使用 MongoDB Compass。本页上的示例使用inventory 集合。使用以下文档填充inventory 集合:

[
    { "item": "journal", "qty": 25, "size": { "h": 14, "w": 21, "uom": "cm" }, "status": "A" },
    { "item": "notebook", "qty": 50, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "A" },
    { "item": "paper", "qty": 100, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "D" },
    { "item": "planner", "qty": 75, "size": { "h": 22.85, "w": 30, "uom": "cm" }, "status": "D" },
    { "item": "postcard", "qty": 45, "size": { "h": 10, "w": 15.25, "uom": "cm" }, "status": "A" }
]

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

要选择集合中的所有文档,请将空文档作为查询筛选器参数传递到查询栏。查询筛选器参数确定选择条件:

此操作使用{}的筛选器谓词,该谓词对应于以下SQL语句:

SELECT * FROM inventory

2、指定相等条件

要指定相等条件,请在<field>:<value>查询筛选器文档:

{ <field1>: <value1>, ... }

以下示例从库存集合中选择状态为“D”的所有文档:

将以下筛选器复制到指南针查询栏中,然后单击“查找”:

{ status: "D" }

此操作使用{status:“D”}的筛选器谓词,该谓词对应于以下SQL语句:

SELECT * FROM inventory WHERE status = "D"

3、使用查询运算符指定条件

一个查询筛选器文档能 使用查询运算符以指定 以下形式的条件:

{ <field1>: { <operator1>: <value1> }, ... }

以下示例从库存集合中检索状态等于“A”或“D”的所有文档:

将以下筛选器复制到指南针查询栏中,然后单击“查找”:

{ status: { $in: [ "A", "D" ] } }

该操作使用{status:{$in:[“a”,“D”]}}}的筛选器谓词,该谓词对应于以下SQL语句:

SELECT * FROM inventory WHERE status in ("A", "D")

4、指定AND条件

复合查询可以为集合文档中的多个字段指定条件。逻辑AND连接隐含地连接复合查询的子句,以便查询选择集合中符合所有条件的文档。

以下示例检索库存集合中状态等于“A”且数量小于($lt)30的所有文档:

将以下筛选器复制到指南针查询栏中,然后单击“查找”:

{ status: "A", qty: { $lt: 30 } }

该操作使用{status:“a”,数量:{$lt:30}}的筛选器谓词,该谓词对应于以下SQL语句:

SELECT * FROM inventory WHERE status = "A" AND qty < 30

5、指定OR条件

使用$or运算符,可以指定一个复合查询,该查询将每个子句与逻辑or连接符连接起来,以便查询选择集合中至少符合一个条件的文档。

以下示例检索集合中状态等于“A”或数量小于($lt)30的所有文档:

将以下筛选器复制到指南针查询栏中,然后单击“查找”:

{ $or: [ { status: "A" }, { qty: { $lt: 30 } } ] }

该操作使用{$或:〔{status:“a”},{qty:{$lt:30}}〕}的筛选器谓词,该谓词对应于以下SQL语句:

SELECT * FROM inventory WHERE status = "A" OR qty < 30

6、指定AND和OR条件

在以下示例中,复合查询文档选择集合中状态等于“A”且数量小于($lt)30或项目以字符p开头的所有文档:

将以下筛选器复制到指南针查询栏中,然后单击“查找”:

{ status: "A", $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ] }

四、更新文档

此页面使用以下内容mongosh方法:

  • db.collection.updateOne(<filter>, <update>, <options>)
  • db.collection.updateMany(<filter>, <update>, <options>)
  • db.collection.replaceOne(<filter>, <update>, <options>)

1、更新集合中的文档

要更新文档,MongoDB提供了更新运算符这样 如$set,以修改字段值。

若要使用更新运算符,请将 更新表格的文档:

{
  <update operator>: { <field1>: <value1>, ... },
  <update operator>: { <field2>: <value2>, ... },
  ...
}

如果字段不存在,一些更新运算符(如$set)将创建该字段。查看个人信息更新运算符详情请参考。

2、更新单个文档

以下示例使用库存集合上的db.collection.updateOne()方法更新item等于“paper”的第一个文档:

db.inventory.updateOne(
   { item: "paper" },
   {
     $set: { "size.uom": "cm", status: "P" },
     $currentDate: { lastModified: true }
   }
)

更新操作:

  • 使用$set运算符将size.uom字段的值更新为“cm”,将状态字段的值更改为“P”,
  • 使用$currentDate运算符将lastModified字段的值更新为当前日期。如果lastModified字段不存在,则$currentDate将创建该字段。有关详细信息,请参阅$currentDate。
db.inventory.updateMany(
   { "qty": { $lt: 50 } },
   {
     $set: { "size.uom": "in", status: "P" },
     $currentDate: { lastModified: true }
   }
)

更新操作:

  • 使用$set运算符将size.uom字段的值更新为“in”,将状态字段的值更改为“P”,
  • 使用$currentDate运算符将lastModified字段的值更新为当前日期。如果lastModified字段不存在,则$currentDate将创建该字段。有关详细信息,请参阅$currentDate。
db.inventory.replaceOne(
   { item: "paper" },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)

3、行为

原子性

MongoDB中的所有写操作都是单个文档级别的原子操作。

_id字段

一旦设置,就不能更新_id字段的值,也不能用具有不同_id字段值的替换文档替换现有文档。

字段顺序

对于写操作,MongoDB保留文档字段的顺序,以下情况除外:

  • _id字段始终是文档中的第一个字段。
  • 包含字段名称重命名的更新可能会导致文档中字段的重新排序。

五、删除文档

删除文档有两个方法:

  • db.collection.deleteMany()
  • db.collection.deleteOne()

1、删除所有文档

要从集合中删除所有文档,请将空的筛选器文档{}传递给db.collection.deleteMany()方法。

以下示例从库存集合中删除所有文档:

db.inventory.deleteMany({})
db.inventory.deleteMany({})

2、删除所有符合条件的文档

您可以指定用于标识要删除的文档的条件或筛选器。过滤器使用与读取操作相同的语法。

要指定相等条件,请在<field>:<value>查询筛选器文档:

{ <field1>: <value1>, ... }

查询筛选器文档可以使用查询运算符以以下形式指定条件:

{ <field1>: { <operator1>: <value1> }, ... }

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

以下示例从库存集合中删除状态字段等于“A”的所有文档:

db.inventory.deleteMany({ status : "A" })

3.仅删除一个与条件匹配的文档

要最多删除一个与指定筛选器匹配的文档(即使多个文档可能与指定筛选器相匹配),请使用db.collection.deleteOne()方法。

以下示例删除状态为“D”的第一个文档:

db.inventory.deleteOne( { status: "D" } )

4、删除行为

索引

即使从集合中删除所有文档,删除操作也不会删除索引。

原子性

MongoDB中的所有写操作都是单个文档级别的原子操作。有关MongoDB和原子性的更多信息,请参阅原子性和事务。

写入确认

对于写操作,您可以指定MongoDB请求的写操作确认级别。

六、批量写入操作

1、概述

MongoDB为客户端提供批量执行写操作的能力。大容量写入操作影响单个集合。MongoDB允许应用程序确定批量写入操作所需的可接受确认级别。

db.collection.bulkWrite()方法提供了执行批量插入、更新和删除操作的能力。

MongoDB还支持通过db.collection.insertMany()方法进行批量插入。

2、有序操作与无序操作

大容量写入操作可以是有序的,也可以是无序的。

使用有序的操作列表,MongoDB可以连续执行这些操作。如果在处理其中一个写操作时发生错误,MongoDB将返回,而不处理列表中的任何剩余写操作。请参阅有序批量写入

使用无序的操作列表,MongoDB可以并行执行这些操作,但不能保证这种行为。如果在处理其中一个写操作时发生错误,MongoDB将继续处理列表中的其余写操作。请参阅无序批量写入示例。

对碎片化集合执行有序操作列表通常比执行无序列表慢,因为对于有序列表,每个操作都必须等待上一个操作完成。

默认情况下,bulkWrite()执行有序操作。要指定无序写入操作,请在选项文档中设置ordered:false。

3、bulkWrite()方法

bulkWrite()支持以下写入操作:

  • insertOne
  • updateOne
  • updateMany
  • replaceOne
  • deleteOne
  • deleteMany

每个写操作都作为数组中的文档传递给bulkWrite()。

下面的bulkWrite()示例在pizza集合上运行这些操作:

  • 使用.insertOne添加两个文档
  • 使用.updateOne更新文档
  • 使用.deleteOne删除文档
  • 使用.replaceOne替换文档
try {
   db.pizzas.bulkWrite( [
      { insertOne: { document: { _id: 3, type: "beef", size: "medium", price: 6 } } },
      { insertOne: { document: { _id: 4, type: "sausage", size: "large", price: 10 } } },
      { updateOne: {
         filter: { type: "cheese" },
         update: { $set: { price: 8 } }
      } },
      { deleteOne: { filter: { type: "pepperoni"} } },
      { replaceOne: {
         filter: { type: "vegan" },
         replacement: { type: "tofu", size: "small", price: 4 }
      } }
   ] )
} catch( error ) {
   print( error )
}

示例输出,包括已完成操作的摘要:

{
   acknowledged: true,
   insertedCount: 2,
   insertedIds: { '0': 3, '1': 4 },
   matchedCount: 2,
   modifiedCount: 2,
   deletedCount: 1,
   upsertedCount: 0,
   upsertedIds: {}
}




官网:Doker 多克; 官方旗舰店首页-Doker 多克 多克创新科技企业店-淘宝网全品优惠,期待您的支持!!! Doker 技术人的数码品牌!!!

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
1月前
|
NoSQL Java MongoDB
Springboot WebFlux项目结合mongodb进行crud
这篇文章介绍了如何使用Spring Boot WebFlux框架结合MongoDB进行基本的CRUD(创建、读取、更新、删除)操作,包括项目设置、实体类和Repository的创建、控制器的实现以及配置文件的编写。
47 0
Springboot WebFlux项目结合mongodb进行crud
|
1月前
|
存储 NoSQL MongoDB
MongoDB入门级别教程全(Windows版,保姆级教程)
一份全面的MongoDB入门级教程,包括在Windows系统上安装MongoDB、使用MongoDB Shell和Compass GUI进行数据库操作,以及MongoDB的基本数据类型和查询技巧。
66 2
MongoDB入门级别教程全(Windows版,保姆级教程)
|
1月前
|
存储 JSON NoSQL
MongoDB Compass 的教程
这篇文章提供了MongoDB Compass的基本使用教程,包括如何建立数据库连接、创建和删除数据库、插入和修改文档数据,以及执行聚合查询来分析和排序数据。
197 0
MongoDB Compass 的教程
|
5月前
|
NoSQL 前端开发 MongoDB
[保姆级教程]Windows安装MongoDB教程
【6月更文挑战第4天】该内容是关于MongoDB的安装包下载及安装步骤指南。首先,访问网址 &lt;a href=&quot;https://www.mongodb.com/try&quot; target=&quot;_blank&quot;&gt;https://www.mongodb.com/try&lt;/a&gt; 进入官网,选择MongoDB Community Edition(社区版)。接着,挑选合适的版本和系统平台,推荐下载zip压缩包。下载后,进行安装,依次点击“Next”同意协议,选择自定义安装路径,然后继续安装直至完成。
610 0
|
2月前
|
NoSQL MongoDB 数据库
python3操作MongoDB的crud以及聚合案例,代码可直接运行(python经典编程案例)
这篇文章提供了使用Python操作MongoDB数据库进行CRUD(创建、读取、更新、删除)操作的详细代码示例,以及如何执行聚合查询的案例。
33 6
|
1月前
|
SQL NoSQL MongoDB
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
42 0
|
1月前
|
存储 JSON NoSQL
MongoDB 教程
10月更文挑战第9天
34 0
|
3月前
|
JavaScript NoSQL 前端开发
|
4月前
|
DataWorks NoSQL fastjson
DataWorks操作报错合集之DataX进行MongoDB全量迁移的过程中,DataX的MongoDB Reader插件在初始化阶段找不到Fastjson 2.x版本的类库,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
存储 NoSQL Linux
【MongoDB】下载安装、指令操作
【MongoDB】下载安装、指令操作
183 1