无法更新文档中的嵌套字段 (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
键必须首先设置为某物,否则这将是赋值错误。
我的 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
键必须首先设置为某物,否则这将是赋值错误。