Mongoose 中更新嵌套文档

阅读时长 4 分钟读完

Mongoose 中更新嵌套文档

Mongoose 是一个 Node.js 平台下的 MongoDB 对象模型工具,它可以让我们使用 Node.js 更方便地操作 MongoDB 数据库。在 Mongoose 中,我们可以使用 update() 方法来更新文档,但是当文档中包含嵌套文档时,更新起来就相对麻烦了。本文将介绍在 Mongoose 中如何更新嵌套文档。

更新嵌套文档

首先,我们需要了解嵌套文档的数据类型。在 Mongoose 中,我们可以使用 Schema.Types.ObjectId 类型来定义一个文档的对象 ID。而在嵌套文档中,我们可以使用 Schema.Types.Mixed 类型来定义一个文档的嵌套对象,它可以存储任意类型的数据,包括对象 ID。

下面是一个示例代码,其中 UserPost 是两个集合,Post 集合中的 comments 字段是一个包含嵌套文档的数组:

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

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

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

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

现在,假设我们想要更新 Post 集合中的一条评论信息,我们需要知道该评论所属的文章 ID 和评论 ID。假设我们已经获取了这两个 ID,那么更新方法如下:

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

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

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

在上面的代码中,我们首先使用 findOneAndUpdate() 方法查找到要更新的评论,它的第一个参数表示查找条件,第二个参数表示更新的内容,其中 $set 操作符用来更新数组中的指定位置的元素。'comments.$' 表示查找到的数组元素,newComment 表示要更新成的内容。

第三个参数 { new: true } 表示返回更新后的文档,而不是原始的文档。

总结

在 Mongoose 中更新嵌套文档需要使用 $set 操作符来更新数组中的元素。在使用 $set 操作符时需要使用数组元素的索引位置。Mongoose 提供了很多操作符来更新嵌套文档,例如 $push$pull 等。选择合适的操作符可以让嵌套文档的更新操作更简单、更高效。

参考文献

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

纠错
反馈