无法更新文档中的嵌套字段(Node.js / Mongo)

时间:2015-09-24 02:05:38

标签: node.js mongodb express mongojs

我的收藏中只有一个文件:

{
     "_id":ObjectID("...."),

     "Last, First" : {
          "Mon 8/28":"10:15-9:00p",
          "Wed 8/31":"9:00a-12:00p"
      },
     ...
}

我从前端的AJAX调用

接收这些变量
var name = "Last, First";
var date = "Wed 8/31";
var newTime = "10:00p-3:00a";

我正在尝试使用Express.js中的MongoJS来调用新时间来更新文档,但是我遇到了麻烦(堆栈的新功能)。我尝试使用:

collection.update({}, {$set: {name.date : newTime}});

但我无法正确更新它。我想这样做,以便嵌入文档更新来自通话的新时间。谢谢!

1 个答案:

答案 0 :(得分:3)

你需要在JavaScript中构建密钥作为任何东西"左侧"或"关键方"总是字面上解释为字符串。但是有一个简单的语法可以遵循:

var name = "Last, First";
var date = "Wed 8/31";
var newTime = "10:00p-3:00a";

var update = { "$set": {} };

update.$set[name + "." + date] = newTime;

collection.update({}, update);

因此,变量update现在使用"点符号"来构造复合字符串。来自每个变量部分。括号[]表示法允许在引用对象时构造键名,但当然必须先将较高级$set键设置为某个键,否则这将是分配时的错误。