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

Having trouble updating nested field inside a document (Node.js/Mongo)

我的 collection 中只有一个文档:

{
     "_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}});

但我无法正确更新它。我想这样做,以便使用来自呼叫的新时间更新嵌套文档。谢谢!

您需要在 JavaScript 中构建密钥,因为任何 "left side" 或 "key side" 始终按字面解释为字符串。但是有一个简单的语法可以遵循:

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 现在是使用来自每个变量部分的 "dot notation" 的复合字符串构造的。括号 [] 表示法允许在引用对象时构造键名,但是当然更高级别的 $set 键必须首先设置为某物,否则这将是赋值错误。