使用 Mongoose 时如何更新嵌套对象

阅读时长 4 分钟读完

引言

当使用 Mongoose ORM 来操作 MongoDB 时,可能会遇到需要更新嵌套对象的情况。本文将介绍如何在 MongoDB 中使用 Mongoose ORM 来更新嵌套对象。我们将会讲到嵌套文档、子文档和数组,及如何使用 Mongoose 提供给我们的方法来更新它们。

更新嵌套文档

嵌套文档是通过在一个文档中嵌套另一个文档来创建的。在 Mongoose 中,嵌套文档可以被定义为一个子 schema。下面是一个嵌套文档的例子:

-- -------------------- ---- -------
----- ----------- - --- -----------------
  ----- -
    ----- -------
    --------- ----
  --
  ---- -
    ----- -------
    --------- ----
  -
---

----- ------------ - --- -----------------
  --------- -------------
---

----- ----------- - ------------------------ --------------

这里,parentSchema 中包含了一个 children 属性,它是一个由 childSchema 构成的数组。如果我们想要更新一个子文档中的某个属性,我们可以使用 $set 操作符。下面是一个例子:

-- -------------------- ---- -------
----------------------
  -
    ---- ------------
    --------------- ----------
  --
  -
    ----- -
      ------------------ ---- -----
    -
  --
  ----- ---- -- -
    -- ------ ----- --- -------- ----
  -
--

在这个例子中,我们首先找到要更新的文档的父文档 _id,然后使用子文档的 _id 来定位要更新的子文档。注意,我们使用 $ 符来指向第一个被匹配的子文档。这样,我们就可以通过 $set 操作符来更新该子文档中的 name 值。

更新子文档

子文档和嵌套文档有些不同。子文档是一个特殊的嵌套文档,其模式被声明在模型定义中。当我们在文档中创建这样的子文档时,Mongoose 会自动将其转换成一个实现了所有子文档方法的对象。下面是一个定义包含一个子文档的示例:

-- -------------------- ---- -------
----- ----------- - --- -----------------
  ----- -
    ----- -------
    --------- ----
  --
  ---- -
    ----- -------
    --------- ----
  -
---

----- ------------ - --- -----------------
  ------ -----------
---

----- ----------- - ------------------------ -------------- 

在这个例子中,parentSchema 包含了一个 child 属性,它的值是一个由 childSchema 声明的子文档。我们可以使用 ParentModel.findOneAndUpdate() 方法来更新这个子文档。

下面是一个例子:

在这个例子中,我们可以直接使用 findOneAndUpdate() 方法来更新子文档的名字。这个操作会直接在数据库中更新相应的文档并且返回更新后的结果。注意,我们添加了 { new: true } 参数来确保返回更新后的文档。如果使用默认值,它将返回更新前的文档。

更新数组

当我们的嵌套对象是一个数组时,我们同样可以使用 $set 操作符来实现更新。下面是一个例子:

-- -------------------- ---- -------
----- ------------ - --- -----------------
  --------- --------
---

----- ----------- - ------------------------ --------------

----------------------
  - ---- ----------- --
  - ----- - ------------- ---- ----- - --
  ----- ---- -- -
    -- ------ ----- --- -------- ----
  -
--

在这个例子中,我们使用 $set 操作符直接更新 children 属性数组中的第一项。

总结

在本文中,我们学习了如何使用 Mongoose ORM 更新 MongoDB 数据库中的嵌套对象。我们讲到了如何更新嵌套文档、子文档和数组,以及如何使用 $set 操作符来更新这些对象。在实践中,更新嵌套对象是一个常见的操作,在这方面掌握 Mongoose ORM 的使用是非常有价值的。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c0b49b83d39b488150cf6f

纠错
反馈