【问题标题】:How to update only one property in MongoDB using Mongoose?如何使用 Mongoose 只更新 MongoDB 中的一个属性?
【发布时间】:2026-01-03 01:30:01
【问题描述】:

这是我的模型:

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]

【问题讨论】:

    标签: javascript arrays json mongodb mongoose


    【解决方案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