嵌入式文档的Javascript MongoDB点表示法问题

时间:2017-09-09 15:26:11

标签: javascript mongodb

我正在使用带有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'但我更愿意在参数中声明它并将其传递给服务部门。

有什么想法吗?欢迎所有方法!

2 个答案:

答案 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()
};