使用 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
已弃用。请改用updateOne
、updateMany
或bulkWrite
【讨论】:
【参考方案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?