迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MongoDB >

MongoDB $Set 运算符

作者:迹忆客 最近更新:2023/05/07 浏览次数:

通过本文的帮助,您将了解如何使用 $set 运算符部分更新 MongoDB 中的对象,以便新对象与现有对象重叠/合并。

$set 运算符用给定值替换字段的值。 $set 运算符表达式使用以下语法。

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

您将使用点表示法在嵌入文档或数组中指定一个 <field>


MongoDB $set 运算符

如果该字段不存在,只要新字段不违反任何约束,$set 运算符就会创建一个具有指定值的字段。

例如,如果您为不存在的字段提供了一个点路径,$set 运算符将根据需要生成嵌入文档以完成点路径。

此外,如果您指定多个字段值对,$set 运算符将更新或创建每个字段。

您可以创建以下产品集合。

db={
  "products": [
    {
      _id: 100,
      quantity: 250,
      instock: true,
      reorder: false,
      details: {
        model: "PTI",
        make: "Breakout"
      },
      tags: [
        "jeans",
        "clothing"
      ],
      ratings: [
        {
          by: "CustomerIK",
          rating: 3
        }
      ]
    }
  ]
}

设置 Top-Level 字段

对于匹配条件 _id 等于 100 的文档,下面的操作使用 $set 运算符来更新 details 字段、quantity 字段和 tags 字段的值。 下面给出了对此的查询。

db.products.update(
   { _id: 100 },
   { $set:
      {
        quantity: 500,
        details: { model: "2600", make: "Outfitters" },
        tags: [ "coats", "outerwear", "clothing" ]
      }
   }
)

上面的操作更新了下面的内容。

  1. 数量值到 500。
  2. 带有新嵌入文档的详细信息字段
  3. 用新数组标记字段

上面查询的结果显示在下面的屏幕截图中。

Set Top-Level Fields


在嵌入式文档中设置字段

您将使用点符号在嵌入文档或数组中指定 <field>。 对于匹配条件 _id 等于 100 的文档,以下操作更新详细信息文档中的 make 字段。

下面给出了对此的查询。

db.products.update(
   { _id: 100 },
   { $set: { "details.make": "Breakout Kids" } }
)

上面查询的结果显示在下面的屏幕截图中。

在嵌入式文档中设置字段


在数组中设置元素

以下操作修改 tags 字段的第二个元素(数组索引为 1)中的值和 ratings 数组的第一个元素(数组索引为 0)中的 rating 字段中满足条件 _id 等于 100 的文档。

下面给出了对此的查询。

db.products.update(
   { _id: 100 },
   { $set:
      {
        "tags.1": "wind breaker",
        "ratings.0.rating": 2
      }
   }
)

上面查询的结果显示在下面的屏幕截图中。

在数组中设置元素


$set(聚合)

$set(聚合)向文档添加新字段。 $set 输出包含输入文档中所有现有字段和新添加字段的文档。

$set(聚合)具有以下语法。

{ $set: { <newField>: <expression>, ... } }

$set 是一个向现有文档添加新字段的命令。 用户可以在聚合操作中包含一个或多个 $set 阶段。

使用点符号向嵌入文档(包括数组中的文档)添加字段或字段。 使用 $concatArrays 将元素添加到使用 $set 的现有数组字段。


使用两个 $set 阶段

使用以下内容创建示例成绩集合。

db={
  "grades": [
    {
      _id: 1,
      student: "Ali",
      homework: [10, 8, 9],
      quiz: [9, 8],
      extraCredit: 3
    },
    {
      _id: 2,
      student: "Manahil",
      homework: [3, 8, 5],
      quiz: [7, 9],
      extraCredit: 6
    }
  ]
}

在以下过程中使用两个 $set 阶段将三个新字段添加到输出文档。 下面给出了对此的查询。

db.grades.aggregate( [
   {
     $set: {
        totalHomework: { $sum: "$homework" },
        totalQuiz: { $sum: "$quiz" }
     }
   },
   {
     $set: {
        totalScore: { $add: [ "$totalHomework", "$totalQuiz", "$extraCredit" ] } }
   }
] )

该操作返回以下文档,如下面的屏幕截图所示。

使用两个设置阶段


向嵌入文档添加字段

使用以下内容创建样本收集传输。

db={
  "transport": [
    {
      _id: 1,
      type: "sedan",
      specs: { doors: 4, wheels: 4}
    },
    {
      _id: 2,
      type: "motorbike",
      specs: {doors: 0, wheels: 2}
    },
    {
      _id: 3,
      type: "jet ski"
    }
  ]
}

以下聚合操作在嵌入式文档规范中创建一个新字段 fuel_type。 下面给出了对此的查询。

db.transport.aggregate( [
   { $set: { "specs.fuel_type": "super" } }
] )

该操作返回以下结果,如下面的屏幕截图所示。

向嵌入文档添加字段


覆盖现有字段

当 $set 操作指定现有字段名称时,原始字段将被替换。 使用以下项目制作宠物样本集。

db={
  "pets": [
    {
      _id: 1,
      dogs: 10,
      cats: 5
    }
  ]
}

随后的 $set 操作覆盖了 cats 字段。 下面给出了对此的查询。

db.pets.aggregate( [
  { $set: { "cats": 20 } }
] )

该操作返回以下文档,如下面的屏幕截图所示。

覆盖现有字段


向数组添加元素

使用以下记录创建示例成绩集合。

db={
  "grades": [
    {
      _id: 1,
      student: "Ali",
      homework: [10, 8, 9],
      quiz: [9, 8],
      extraCredit: 3
    },
    {
      _id: 2,
      student: "Manahil",
      homework: [3, 8, 5],
      quiz: [7, 9],
      extraCredit: 6
    }
  ]
}

用户可以将 $set 运算符与 $concatArrays 表达式一起使用。 这会将一个元素添加到现有的数组字段中。

以下操作使用 $set 将 homework 字段替换为一个新数组,该数组的元素是当前 homework 数组与另一个包含新分数 [ 7 ] 的数组连接而成。 下面给出了对此的查询。

db.grades.aggregate([
   { $match: { _id: 2 } },
   { $set: { homework: { $concatArrays: [ "$homework", [ 7 ] ] } } }
])

该操作返回以下文档,如下面的屏幕截图所示。

向数组添加元素

在本文中,您学习了如何使用 $set 运算符部分更新 MongoDB 中的对象,以便新对象与现有对象重叠/合并。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 MongoDB Shell 中列出所有数据库

发布时间:2023/05/11 浏览次数:180 分类:MongoDB

交互式 Mongo Shell 提供了多个用于获取数据的选项。 本文介绍了在 Mongo Shell 中列出数据库的几种不同方法。

MongoDB 中检查字段包含的字符串

发布时间:2023/05/11 浏览次数:1024 分类:MongoDB

这篇文章解决了如何在 MongoDB 中使用正则表达式来确定字段是否包含字符串。在 MongoDB 中使用正则表达式 正则表达式 (regex) 是定义搜索模式的文本字符串。

在 MongoDB 中 upsert 更新插入

发布时间:2023/05/11 浏览次数:214 分类:MongoDB

在 MongoDB 中,upsert 结合了更新和插入命令。 它可以在 update() 和 findAndModify() 操作中使用。MongoDB 中的 upsert 查询 upsert 采用单个布尔参数。

如何卸载 MongoDB

发布时间:2023/05/11 浏览次数:745 分类:MongoDB

要从您的计算机中卸载 MongoDB,您必须先删除 MongoDB 服务、数据库和日志文件。使用这篇 MongoDB 文章,您将能够从 Ubuntu Linux、Mac 和 Windows 卸载 MongoDB。 请务必保留数据备份,因为一旦卸载,便

在 MongoDB 中存储日期和时间

发布时间:2023/05/11 浏览次数:762 分类:MongoDB

本 MongoDB 教程解释了 Date() 对象是什么以及如何使用 Date() 方法对集合进行排序。 这也将帮助您找到在 MongoDB 中显示和存储日期/时间的最佳方法。

MongoDB 按 ID 查找

发布时间:2023/05/11 浏览次数:1856 分类:MongoDB

MongoDB 中的 find by Id() 函数用于获取与用户提供的 id 相匹配的文档。 如果找不到与指定 ID 匹配的文档,则返回空值。

检查 MongoDB 服务器是否正在运行

发布时间:2023/05/11 浏览次数:247 分类:MongoDB

这篇 MongoDB 教程将告诉您如何检查是否安装了 MongoDB 以及安装的 MongoDB 服务器的版本。 它在 Windows、UBUNTU 和 MAC 等不同的操作系统中实现。

MongoDB 中的分页

发布时间:2023/05/11 浏览次数:174 分类:MongoDB

这篇文章将介绍什么是 MongoDB 中的分页。 为什么在 MongoDB 中需要分页以及在 MongoDB 中完成分页的不同方法或方式是什么。

MongoDB 从查询开始

发布时间:2023/05/11 浏览次数:186 分类:MongoDB

在这篇 MongoDB 文章中,用户将学习如何使用 $regex 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便