MongoDB 标签复用 + 无限级子分类设计思路(不可行)

更新:方法不可行

我在一个 Collection 中有两个数组,分别是上级标签(1,2,3)、关键词(电影,影视),我希望让每个上级标签中都能搜索到下属关键词(1-电影,1-影视,2-电影,2-影视,3-电影,3-影视),在创建索引时提示:

caused by :: cannot index parallel arrays

查了一下情况,发现这种索引是不可创建的,因为数组交叉产生的笛卡尔积不可控。

https://stackoverflow.com/questions/6516725/how-do-i-index-two-arrays-in-mongodb

也就是说我之前的设想是无法实现的。


标签(意同:分类/目录)复用是指同一标签/分类可出现于不同Parent分类中。比如:

电影/科幻 和 卡梅隆电影合集/科幻 中的 ”科幻“ 一词语境、含义完全相同,当该标签出现多个关键词时(比如不同语言),如果为每个分类都建立子目录,则会造成标签编辑的重复和存储资源的浪费。

借助MongoDB强大的数组和对象索引能力,我们可以改变传统的存储模式,将每个标签与其所归属的上级目录(^:ObjectID)建立关联,并衍生出子目录(_:new ObjectID)。

文章表中的数据只需要记录其所归属的子目录,逐层递归即可推导出分类标签的层级关系。

实话说,上述设计模式还在测试中,能否实现复杂的索引逻辑还不得而知。

如果无法按照以上模式进行设计,则考虑更换为类似于MySQL的传统多行模式。

不过这样会造成大量的数据重复,好处是逻辑相对简单易懂。

更新,主楼方法不可行,改用二楼传统方式索引递归。

1