繁体   English   中英

嵌入文档的 Javascript MongoDB 点符号问题

[英]Javascript MongoDB dot notation issue for embedded document

我正在使用带有 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:“params.media.image”中的虚线字段“media.image”对存储无效。

我认为问题是由于这样一个事实,即通过使用引号声明对象,它将其声明为对象键“media.image”,而不是将其保留为字符串。 根据 MongoDB $set文档:

要在嵌入文档或数组中指定 a,请使用点表示法。

https://docs.mongodb.com/manual/reference/operator/update/set/

从技术上讲,我可以手动编写查询以包含“media.image”,但我更愿意在参数中声明它并将其传递给服务。

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

使用 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()
}

借助 JavaScript,由于 ECMAScript 2015 计算属性名称,您可以通过在相关键周围添加方括号 [] 来使用点表示法。 在您的情况下,它将是:

params = {
  title: title,
  description: description,
  ["media.image"]: image,
  feedUpdated: new Date()
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM