【问题标题】:Using mongoose to add new field to existing document in mongodb through update method使用 mongoose 通过 update 方法向 mongodb 中的现有文档添加新字段
【发布时间】: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 })

【问题讨论】:

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

标签: node.js mongodb mongoose


【解决方案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" });
                    })
    

    【讨论】:

      猜你喜欢
      • 2023-02-14
      • 2014-07-20
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 2021-02-17
      • 2020-07-04
      相关资源
      最近更新 更多