迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > 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 中的 $unset 运算符

发布时间:2023/05/10 浏览次数:135 分类:MongoDB

本文将讨论 $unset 运算符在 MongoDB 中的工作原理。 此外,我们将演示使用此运算符从 MongoDB 集合中的所有文档中删除一个字段。MongoDB 中的 $unset 运算符 $unset 是用于从实体中删除字段的运算符。

MongoDB 中的 $ne 运算符

发布时间:2023/05/10 浏览次数:82 分类:MongoDB

本文将讨论 $ne 运算符如何在 MongoDB 中工作。 另外,我们会列举它与$not操作符的区别。MongoDB 中的 $ne 运算符 $ne 是MongoDB中的一个运算符,代表不等于。

在 MongoDB 中更新用户密码

发布时间:2023/05/10 浏览次数:156 分类:MongoDB

本文将讨论如何更新 MongoDB 数据库的用户密码,并且我们还将看到一个与该主题相关的示例以使其更容易。在 MongoDB 中更新用户密码

比较 MongoDB 中的字段

发布时间:2023/04/21 浏览次数:51 分类:MongoDB

在本文中,我们将了解如何比较 MongoDB 中的两个字段。 此外,我们将看到一个相关的示例和解释,以使主题更容易理解。

清除或删除 MongoDB 中的集合

发布时间:2023/04/21 浏览次数:147 分类:MongoDB

本篇文章将告诉大家如何删除 MongoDB 数据库中的集合以及删除 MongoDB 中的集合的不同方法。

MongoDB 截断集合

发布时间:2023/04/21 浏览次数:178 分类:MongoDB

可以根据需要选择两个选项之一来截断下面的集合。 在今天的文章中,我们将学习如何在 MongoDB 中截断集合。

删除 MongoDB 中的重复项

发布时间:2023/04/21 浏览次数:151 分类:MongoDB

在本文中,我们将了解如何删除 MongoDB 中的重复条目,并且我们还将看到一个带有适当解释的示例,以使主题更容易理解。

使用 NodeJS 检查 MongoDB 中是否存在集合

发布时间:2023/04/21 浏览次数:194 分类:MongoDB

在本文中,我们将检查 MongoDB 数据库中是否存在一个集合,并且我们还将查看与主题相关的示例,以使主题更容易理解。 为此,我们将使用 Node.js。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便