0

我有一个现有的 PostgreSQL 数据库,其中包含大约 500,000 个条目,每个条目本质上是一个巨大的类别树中的一个类别(每个类别都有不同的元素模式)。

我还有一个 MySQL 数据库,它包含大约 100,000 个文档,每个文档都可以是一个或多个类别中的类别。

我需要能够搜索与文档链接到的类别中设置的属性过滤器匹配的文档。

据我了解,我必须将与文档链接到的所有类别相关的所有数据存储在每个文档中,在 mongo 中,这看起来很疯狂。我怎样才能使这项工作?

例如,想象一个类别,它代表 1964 年制造的红色汽车,以及 1990 年编写的关于那辆红色汽车的文档。我需要能够搜索 1964 年并细化关于汽车的文件,以及汽车本身。

4

1 回答 1

1

MongoDB 中的 n:m 关系可以用数据库引用数组 (DBRef) 或对象 ID 数组来表示。

因此,每个文档都会有一个“类别”字段,其中包含一个数组,其中包含其所属类别的 ID 或数据库引用。

有关详细信息,请参阅本文:http: //docs.mongodb.org/manual/applications/database-references/

避免执行多个数据库查询只是为了显示类别名称的替代方法是将类别名称放在该数组中而不是 ID 中。然后,您还应该为您的类别集合的名称字段添加一个索引(使用 ensureIndex 函数)以加快查找速度(无论如何,您可能希望在此字段上创建一个唯一索引以避免重复的类别名称)。

关于对象具有的数据,因为它属于一个类别,例如具有制造商的汽车和具有文档中提到的其他对象列表的文档:此数据应直接放入对象的文档中。面向文档的数据库的优点是并非每个实体都必须具有相同的字段。

于 2012-09-05T11:15:46.100 回答