我正在使用带有Javascript的MongoDB。我试图声明以下参数:
params = {
title: title,
description: description,
"media.image": image,
feedUpdated: new Date()
};
然后我使用包含$ set的服务运行查询,如下所示:
collection.update({
_id: ObjectId(id)
}, {
$set: {
params
}
}, function(e, updated) {
cb(e, updated);
});
但是我收到以下错误:
MongoError:虚线字段' media.image' in' params.media.image'无效 用于存储。
我认为问题是由于通过使用引号声明对象,它将其声明为对象键" media.image"而不是把它留作一个字符串。根据MongoDB $ set 文档:
要在嵌入文档或数组中指定a,请使用dot 符号
https://docs.mongodb.com/manual/reference/operator/update/set/
我可以在技术上手动编写查询以包含' media.image'但我更愿意在参数中声明它并将其传递给服务部门。
有什么想法吗?欢迎所有方法!
答案 0 :(得分:1)
使用MongoDB时,不允许在键中使用点。我可以建议两种方法:
// #1 camelCase
params = {
title: title,
description: description,
mediaImage: image,
feedUpdated: new Date()
}
// #2 object
params = {
title: title,
description: description,
media: { image: image },
feedUpdated: new Date()
}
答案 1 :(得分:0)
借助JavaScript,由于有了ECMAScript 2015计算出的属性名称,您可以通过在所涉及的键周围添加方括号[]来使用点表示法。在您的情况下,应该是:
params = {
title: title,
description: description,
["media.image"]: image,
feedUpdated: new Date()
};