javascript - 使用变量键作为对象值时,在 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
}
);
在此先感谢您的帮助。
解决方案
应该是这样的:
let id = "5ee8468316a2ea32bcfbf411"
let taskName="work"
Data.findByIdAndUpdate(id,
{$set:{task:{[taskName]:{}}},
(err,data)=> {
if(err) throw err
}
)
推荐阅读
- html - 在图像滚动时使帖子标题出现在鼠标悬停/悬停上
- python - 熊猫最近日期变化的合并操作 + / - 3 天
- google-cloud-platform - 当限制已经是 1 时,我还应该增加 GPU 配额吗?
- java - 在 Intellij 中使用 log4j 日志文件格式出现问题
- mysql - MySQL连续数天/连续天数
- python - 如何在opencv中检测仅包含文本的图像是否模糊
- c++ - 尝试将 std::string 分配给 hwProfileInfo 时出现 C++ 错误
- windows - 当 copy_if_different 失败时,如何在 CMake 中复制包含特殊字符的文件?
- svn - 为什么SVN结帐会抛出175002错误?
- sql - 在 ms Access 中,有什么方法可以组合搜索框并输出两者的总和,而不仅仅是两者的并集