【问题标题】:MongoDB - Removing ($unset) nested key from object when nested key is a variableMongoDB - 当嵌套键是变量时,从对象中删除($unset)嵌套键
【发布时间】:2017-05-03 18:52:50
【问题描述】:

考虑一下这份关于讲师 Johnny Appleseed 的课程开始时间的文档:

{
  _id: 'ka83nala9cya9epsj',
  fullName: Johnny Appleseed,
  schedule: {
   '11/05/2016': '12:30',
   '11/15/2016': '2:30',
   '11/16/2016': '1:30',
   '12/07/2016': '9:30',
   '12/18/2016': '10:30', 
   '12/23/2016': '8:30',
  }
  ...
}

我们还将有一个功能来处理所有这些伟大的事情。我尝试了几种不同的mongo.update() 组合,但似乎没有什么是完全正确的。这是一个我认为可行但仍然不行的示例。

function removeStartTime(_instrName, _lessonDate) {
  const _scheduleKey = `schedule.${_lessonDate}`;
  return Instructors.update({ fullName: _instrName }, { $unset: { _scheduleKey: 1 } });
}

目标:

从预定的 2016 年 12 月 18 日日期取消安排(删除)Johnny Appleseed,因此完成的文档将如下所示:

{
  _id: 'ka83nala9cya9epsj',
  fullName: Johnny Appleseed,
  schedule: {
   '11/05/2016': '12:30',
   '11/15/2016': '2:30',
   '11/16/2016': '1:30',
   '12/07/2016': '9:30',
   '12/23/2016': '8:30',
  }
  ...
}

请帮忙,谢谢!

【问题讨论】:

    标签: javascript mongodb unset


    【解决方案1】:

    使用方括号将变量括起来作为属性名称时,您需要使用computed property name 语法:

    Instructors.update({ fullName: _instrName }, { $unset: { [_scheduleKey]: 1 } });
    

    【讨论】:

    • 像魅力一样工作!谢谢你。我之前曾多次使用计算属性名称语法,但总是在这个 obj[key] = 'someValue'; 上下文中,之前从未将整个变量包装在方括号中,现在以一种用手拍到额头的方式产生了很多. :) 再次感谢。
    【解决方案2】:

    Instructors.update({fullName: _instrName},{"$unset": {"schedule.12/18/2016": ""} })

    【讨论】:

    • 这可能会回答这个问题,但并没有它应有的帮助。请解释 OPs 代码有什么问题,为什么您的更改有效,以及您的解决方案可能与此处的其他解决方案有何不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2019-11-18
    • 2017-03-08
    • 2019-08-13
    • 1970-01-01
    相关资源
    最近更新 更多