MongoDB - 多个集合中的一个文档

3
我正在寻找MongoDB的好解决方案来解决这个问题:
有一些类别,每个类别有X个项目。
但是某些项目可以在“许多”类别中出现!
我正在寻找像Unix系统上的符号链接之类的东西,但我找不到。
我的想法是一个很好的主意:
“Category1 / item1”是对象,“category2 / item44232”只是对“item1”的引用,因此当我更改“item1”时,也会更改“item44232”。
我查看了MongoDB数据模型文档,但没有真正解决此问题的方法。
谢谢你的回复!

1
如果你在寻求自动化的解决方案,那么很抱歉,目前并没有这样的工具。不过,MongoDb文档中详细介绍了各种选项:http://docs.mongodb.org/manual/reference/database-references/ - WiredPrairie
你正在构建一个嵌套集树吗? - Sammaye
2个回答

1
在关系型数据库中,您使用联接表来表示一对多的关系; 在MongoDB中,您使用数组键。例如,每个产品都包含一个类别ID数组,而且产品和类别都拥有自己的集合。如果您有两个简单的类别文档。
{ _id: ObjectId("4d6574baa6b804ea563c132a"),
title: "Epiphytes"
}

{ _id: ObjectId("4d6574baa6b804ea563c459d"),
title: "Greenhouse flowers"
}

如果一个产品同时属于这两个类别,它的外观将如下所示:
{ _id: ObjectId("4d6574baa6b804ea563ca982"),
name: "Dragon Orchid",
category_ids: [ ObjectId("4d6574baa6b804ea563c132a"),
ObjectId("4d6574baa6b804ea563c459d") ]
}

了解更多:http://docs.mongodb.org/manual/reference/database-references/


我也在考虑那个解决方案,但是当我想要找到属于一个类别的所有项目时,那不是非常慢吗? - user1717114
作为对你的问题的回答,嵌入可能会提供轻微的性能优势,但引用更加灵活。要查找属于一个类别的所有项目,引用比嵌入略慢一些。 - Jetson John

0

尝试从内部向外看问题:不要将项目放在类别中,而是让项目列出它们所属的类别。

您将能够轻松找到所有属于某个类别(甚至多个类别)的项目,并且没有重复,也没有必要更新同一项目的多个实例。

这可以非常快速和高效,特别是如果您对类别列表进行了索引。请查看多键索引


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接