使用 mongoose 通过 update 方法向 mongodb 中的现有文档添加新字段

Posted

技术标签:

【中文标题】使用 mongoose 通过 update 方法向 mongodb 中的现有文档添加新字段【英文标题】:Using mongoose to add new field to existing document in mongodb through update method 【发布时间】:2017-06-26 21:53:30 【问题描述】:

我正在尝试使用 node.js 中的 mongoose 更新 mongodb 文档

当字段存在时,更新有效,但如果字段不存在,则更新无效。

我想在文档中添加新字段。

MongoDB 查询 ($set) 正在运行:

db.getCollection('users').update( 'uid': 'uid' ,  $set:  'vehicle_status': 'bike'  )  

但是在 mongoose 中它不会起作用。使用 $set 不会添加字段。

User.update( uid: uid ,  $set:  vehicle_status: vehicleSatus  ,  multi: true )

【问题讨论】:

我找到了灵魂。 ***.com/questions/23959287/… 模型未定义新文件。我在模型中添加新文件。并添加归档的工作。 好的,知道有帮助。在这里发布您的问题时,请尽量拼出最好的拼写,因为它们可能对许多人有用,并且有助于他们很好地理解它们:) 在您的模型中包含该字段当然是必要的 【参考方案1】:

试试下面的代码:

User.updateOne(
     uid: 'uid', 
     vehicle_status : 'vehicleSatus' ,
     multi:true, 
       function(err, numberAffected)  
       );

另外,请确保将 vehicle_status 添加到架构中。

【讨论】:

有没有办法在不修改架构的情况下做到这一点? Marwan Ossama,不,您需要在架构中使用它,因为架构定义了文档结构。我想如果您无权访问架构,您可能会使用现有字段并将字符串存储在现有字段中,但这不是一个很好的解决方案,但有时您别无选择,如果您在闭源系统或类似的东西。但是,在那种情况下,上面的代码是无关紧要的。 谢谢蒂姆,我也遇到了同样的问题。更新架构后,每个都按预期工作。干杯! 另外,请确保将 vehicle_status 添加到架构中。 - 重要! @TimBaker 我正在使用 mongoose v5,但它无法正常工作。它仅在我更新当前字段时才有效。你知道有什么变化吗?【参考方案2】:

在 2019 年完成这个解决方案。

请注意:collection.update 已弃用。请改用updateOneupdateManybulkWrite

【讨论】:

【参考方案3】:

始终根据新场景 使用 upsert:true

upsert - 如果设置为 true 并且没有与查询匹配的记录,则替换对象作为新记录插入。

   user.updateOne(
                  email: req.body.email ,
                  $set:  name: 'Aaakash',upsert:true).then((result, err) => 
                    return res.status(200).json( data: result, message:"Value Updated" );
                )

【讨论】:

以上是关于使用 mongoose 通过 update 方法向 mongodb 中的现有文档添加新字段的主要内容,如果未能解决你的问题,请参考以下文章

不使用 API REST MEAN + Mongoose 中的方法“UPDATE”

如何在 Mongoose 中使用 Document#update?

如何在 Mongoose 中使用 Document#update?

mongoose update操作属性中的变量

Mongoose 4.x“model.update()”回调改变

Node.js Mongoose .update 与 ArrayFilters