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

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 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
目录
相关文章
|
4月前
|
NoSQL JavaScript 前端开发
如何使用 Node.js 连接和操作 MongoDB 数据库?
如何使用 Node.js 连接和操作 MongoDB 数据库?
237 2
|
3月前
|
NoSQL MongoDB Python
深入了解 Python MongoDB 操作:排序、删除、更新、结果限制全面解析
使用 sort() 方法对结果进行升序或降序排序。 sort() 方法接受一个参数用于“字段名”,一个参数用于“方向”(升序是默认方向)。
68 0
|
4月前
|
NoSQL MongoDB 数据安全/隐私保护
|
25天前
|
缓存 NoSQL 关系型数据库
【MongoDB】MongoDB更新操作时是否立刻fsync到磁盘?
【4月更文挑战第2天】【MongoDB】MongoDB更新操作时是否立刻fsync到磁盘?
|
26天前
|
消息中间件 NoSQL Kafka
云原生最佳实践系列 5:基于函数计算 FC 实现阿里云 Kafka 消息内容控制 MongoDB DML 操作
该方案描述了一个大数据ETL流程,其中阿里云Kafka消息根据内容触发函数计算(FC)函数,执行针对MongoDB的增、删、改操作。
|
3月前
|
机器学习/深度学习 自然语言处理 NoSQL
|
3月前
|
存储 NoSQL MongoDB
学习如何使用 Python 连接 MongoDB: PyMongo 安装和基础操作教程
Python 需要一个 MongoDB 驱动程序来访问 MongoDB 数据库。我将使用 MongoDB 驱动程序 PyMongo 建议您使用 PIP 来安装 PyMongo。PIP 很可能已经安装在您的 Python 环境中。将命令行导航到 PIP 的位置,然后键入以下内容:
95 1
|
3月前
|
存储 NoSQL MongoDB
Python小姿势 - Python操作MongoDB数据库
Python小姿势 - Python操作MongoDB数据库
|
3月前
|
NoSQL 安全 Linux
百度搜索:蓝易云【CentOS7安装MongoDB教程】
这些是在CentOS 7上安装MongoDB的基本步骤。根据您的需求和具体环境,可能还需要进行其他配置和调整。请确保在进行任何与网络连接和安全相关的操作之前,详细了解您的网络环境和安全需求,并采取适当的安全措施。
133 0
|
4月前
|
NoSQL MongoDB Docker
百度搜索:蓝易云【Scrapy框架之Docker安装MongoDB教程。】
现在,你已经成功在Scrapy框架中使用Docker安装并配置了MongoDB。你可以在Scrapy爬虫中使用MongoDB进行数据存储和处理。
220 0