首页 > 解决方案 > 使用变量键作为对象值时,在 MongoDB 中更新对象数据的正确方法是什么?

问题描述

第一次在这里发帖。

我有一个猫鼬模式和模型,如下所示:

const DataSchema = new Schema(
  {
    name:{type: String, default: ""},
    task: {type: Schema.Types.Mixed, default: {}}
  },
  { timestamps: true, _id: true, minimize: false, strict: false }
);

const Data = mongoose.model("Data", DataSchema);

现在,当使用“名称”参数创建用户配置文件时,我会得到以下响应作为示例:

{"success: true, "data":[{"name":"Eminem","_id":"5ee8468316a2ea32bcfbf411","task":{},"createdAt":"2020-06-16T04:11:47.441Z","updatedAt":"2020-06-16T04:11:47.441Z","__v":0}]}

我的下一步行动是根据用户对“taskName”的输入来更新任务对象。例如:如果用户输入“work”作为“taskName”,我希望任务对象更新为"task": {work:{}}.

为此,我使用了下面的方法,但它从不更新“任务”对象。谁能看到我做错了什么?

var id = "5ee8468316a2ea32bcfbf411"
var taskName="work"
var key = 'task.'+taskName
var push = {}
push[key]={}

Data.findByIdAndUpdate({_id:id}, push, (err,data)=> {
      if(err) throw err
  }
);

在此先感谢您的帮助。

标签: javascriptnode.jsexpressmongoosebackend

解决方案


应该是这样的:

let id = "5ee8468316a2ea32bcfbf411"
let taskName="work"
Data.findByIdAndUpdate(id,
      {$set:{task:{[taskName]:{}}}, 
      (err,data)=> {
      if(err) throw err
  }
)

推荐阅读