Mongo / No SQL解决方案到第二层数据查询?

时间:2012-09-05 10:04:16

标签: mongodb join reference nosql

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

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

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

根据我的理解,我必须存储与文档链接到的所有类别相关的所有数据,在每个文档中,在mongo中,这看起来很疯狂。我怎样才能做到这一点?

作为一个例子,想象一个类别,代表一辆红色汽车,制造于1964年,以及一份1990年写的关于那辆红色汽车的文件。我需要能够搜索1964并精确关于汽车以及汽车本身的文档。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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