MongoDB - 将带有_id的文档嵌入到子项中

时间:2014-02-07 01:11:54

标签: node.js mongodb nosql

我有一份代表商店的文件,其中包含以下广告:

{name: "name of store",
 address: "address of store",
 advertisements: [{title: "title of advertising", desc: "desc of advertising"}]
}

要提高阅读速度并在此商店中插入或查找广告很简单,但要删除特定广告,我该怎么做?

有一种方法可以在广告数组中的元素中添加_id字段吗?这样,我可以通过_id找到一个特定的项目。

我不喜欢使用$ elemMatch通过你的名字或其他不是de _id的字段来查找项目的方法。

谢谢!

1 个答案:

答案 0 :(得分:1)

对于嵌入式文档,没有_id个字段,这些是集合中主文档的属性。这里有一个完整的解释: http://docs.mongodb.org/manual/core/document/

任何嵌入的文档或数组元素甚至数组中的文档都是完全按原样存储的,这是您使用JSON结构或非常接近大多数dynaminc语言本机表示的自然形式。

对于数组中的文档,您可以使用$elemMatch查询运算符来查找要删除的文档。

{ name: "<matching name>", advertisements: { $elemMatch: { title: 'title of advertising'  } } }

或者有点符号方法:

{ name: "<matching name>", advertisements.title = 'title of advertising' }

甚至索引表示法:

{ name: "<matching name>", advertisements[0] }

无论如何,有一组Array operators用于更新,因此您可以操作这些元素。

也许你真正的问题不在于$elemMatch,而是包含的文档结构中没有唯一键来访问它们。既然如此,也许你应该考虑改变数据中子文档的结构,以便有一个合理的标识符用于查找你想要的文件。这通常是最佳实践方法。