引言
当使用 Mongoose ORM 来操作 MongoDB 时,可能会遇到需要更新嵌套对象的情况。本文将介绍如何在 MongoDB 中使用 Mongoose ORM 来更新嵌套对象。我们将会讲到嵌套文档、子文档和数组,及如何使用 Mongoose 提供给我们的方法来更新它们。
更新嵌套文档
嵌套文档是通过在一个文档中嵌套另一个文档来创建的。在 Mongoose 中,嵌套文档可以被定义为一个子 schema。下面是一个嵌套文档的例子:
-- -------------------- ---- ------- ----- ----------- - --- ----------------- ----- - ----- ------- --------- ---- -- ---- - ----- ------- --------- ---- - --- ----- ------------ - --- ----------------- --------- ------------- --- ----- ----------- - ------------------------ --------------
这里,parentSchema
中包含了一个 children
属性,它是一个由 childSchema
构成的数组。如果我们想要更新一个子文档中的某个属性,我们可以使用 $set
操作符。下面是一个例子:
-- -------------------- ---- ------- ---------------------- - ---- ------------ --------------- ---------- -- - ----- - ------------------ ---- ----- - -- ----- ---- -- - -- ------ ----- --- -------- ---- - --
在这个例子中,我们首先找到要更新的文档的父文档 _id
,然后使用子文档的 _id
来定位要更新的子文档。注意,我们使用 $
符来指向第一个被匹配的子文档。这样,我们就可以通过 $set
操作符来更新该子文档中的 name
值。
更新子文档
子文档和嵌套文档有些不同。子文档是一个特殊的嵌套文档,其模式被声明在模型定义中。当我们在文档中创建这样的子文档时,Mongoose 会自动将其转换成一个实现了所有子文档方法的对象。下面是一个定义包含一个子文档的示例:
-- -------------------- ---- ------- ----- ----------- - --- ----------------- ----- - ----- ------- --------- ---- -- ---- - ----- ------- --------- ---- - --- ----- ------------ - --- ----------------- ------ ----------- --- ----- ----------- - ------------------------ --------------
在这个例子中,parentSchema
包含了一个 child
属性,它的值是一个由 childSchema
声明的子文档。我们可以使用 ParentModel.findOneAndUpdate()
方法来更新这个子文档。
下面是一个例子:
ParentModel.findOneAndUpdate( { _id: 'parent_id' }, { 'child.name': 'New Name' }, { new: true }, (err, res) => { // handle error and response here } );
在这个例子中,我们可以直接使用 findOneAndUpdate()
方法来更新子文档的名字。这个操作会直接在数据库中更新相应的文档并且返回更新后的结果。注意,我们添加了 { new: true }
参数来确保返回更新后的文档。如果使用默认值,它将返回更新前的文档。
更新数组
当我们的嵌套对象是一个数组时,我们同样可以使用 $set
操作符来实现更新。下面是一个例子:
-- -------------------- ---- ------- ----- ------------ - --- ----------------- --------- -------- --- ----- ----------- - ------------------------ -------------- ---------------------- - ---- ----------- -- - ----- - ------------- ---- ----- - -- ----- ---- -- - -- ------ ----- --- -------- ---- - --
在这个例子中,我们使用 $set
操作符直接更新 children
属性数组中的第一项。
总结
在本文中,我们学习了如何使用 Mongoose ORM 更新 MongoDB 数据库中的嵌套对象。我们讲到了如何更新嵌套文档、子文档和数组,以及如何使用 $set
操作符来更新这些对象。在实践中,更新嵌套对象是一个常见的操作,在这方面掌握 Mongoose ORM 的使用是非常有价值的。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c0b49b83d39b488150cf6f