如何使用 Mongoose 只更新 MongoDB 中的一个属性?
Posted
技术标签:
【中文标题】如何使用 Mongoose 只更新 MongoDB 中的一个属性?【英文标题】:How to update only one property in MongoDB using Mongoose? 【发布时间】:2020-02-26 23:21:03 【问题描述】:这是我的模型:
import mongoose from 'mongoose';
const UserData = new mongoose.Schema(
additionalData: Array,
name: String,
);
mongoose.model('UserData', UserDataSchema);
mongoose.set('useFindAndModify', false);
export default mongoose.model('UserData');
如何更新UserData
模型的additionalData
属性,例如附加另一个数组。
假设附加数组是
[ 1, 2, 3]
【问题讨论】:
【参考方案1】:您可以使用$addToSet
await UserData.update(name:"something", $addToSet: additionalData: [1,2,3] )
或
await UserData.updateOne(name:"something", $addToSet: additionalData: [1,2,3] )
如果您没有条件这样做,这将添加到所有文档中
await UserData.update(, $addToSet: additionalData: [1,2,3] )
如果要从数组中删除多个值,请使用$pull
await UserData.update(, $pull: additionalData: $in: [ 1, 2,3 ] )
如果你想删除单个值
await UserData.update(, $pull: additionalData:1 )
【讨论】:
但是为什么我需要name
,我正在尝试进行迁移,所以它总是被填充?
但是你需要一些条件对吗?? ,更新位置(用 sql 术语)
这似乎很好用,谢谢。与此相反的是什么,因为我也需要向下迁移选项?
我的意思是你想删除??数组中的值?
什么是删除,或恢复到原来的样子?【参考方案2】:
如果这不是你的意思,请在 cmets 中告诉我,我会编辑答案。
const newArray = [ 1, 2, 3];
const nameToUpdate = 'foo';
mongoose.model('UserData').updateMany(
name: nameToUpdate
, $set:
additionalData: newArray
);
【讨论】:
我们应该使用updateMany()
还是updateOne()
,因为这只是一个属性?
updateOne
并不意味着您将只更新一个属性。这意味着您将只更新一个 document 。您的架构有多个具有多个属性的文档。如果你想用一个查询更新多个文档(例如,每个名为“foo”的文档),你应该使用updateMany
。另一方面,如果您想确保您的查询将只更新一个文档并且无论有多少属性,您都应该使用updateOne
。以上是关于如何使用 Mongoose 只更新 MongoDB 中的一个属性?的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB:如何使用 Mongoose 添加或更新子文档?
如何使用 MongoDB/Mongoose 中的先前值更新字段 [重复]
如何在 mongodb/mongoose 的嵌套数组中检查是不是存在并更新对象?
如何在 mongoose 和 mongodb 中更新嵌套模型
如何在 Mongoose 中更新/更新文档/数据? Passport MongoDB、Express、AngularJS、Nodejs