Couchbase:是否可以通过沙发创建“加入”视图?

时间:2014-01-14 21:43:08

标签: view key parent-child couchbase

我目前正在开发使用Couchbase作为数据库管理器的网站。 在我的数据中,我有与父子关系的对象。出于逻辑原因,这在我的应用程序中更方便(并且逻辑上正确),父母将知道其所有子项(通过包含ID数组)而不是像往常一样在沙发中。 是否可以通过查询父对象返回对象的所有子项?
由于子节点没有parent_id,因此无法进行视图冲突。所以有没有办法在map的map函数中使用另一个视图?或参考自己的观点?或者一个复杂的reduce函数可以帮助,或者两个阶段查看哪个首先获取子id然后查询视图,如果可能的话就像couchbase内部函数。

2 个答案:

答案 0 :(得分:1)

您无法嵌套视图,也无法引用其他视图,原因有很多。但是,您可以将文档整理在一起,并使用文档中的信息并通过单个地图函数处理它们来模拟连接。在我们的文档中,您可以在此处阅读:http://docs.couchbase.com/couchbase-manual-2.2/#solutions-for-simulating-joins

请告诉我,如果您需要,我可以进一步说明如何操作。

在文档中提供双向引用并不罕见。因此,您可以将父ID放在子文档中。当然,如果关系发生变化,您还必须更新它们。此外,您还可以拥有兄弟姐妹,如果信息发生变化,还可以在所有兄弟姐妹中更改兄弟列表。与人类一样,儿童文件当然也可以有多个父母,你可以参考这两个。

当然,就像@scalabilitysolved所说的那样,如果你知道父节点,你可以多次获取子节点,甚至根本不需要View,除非你必须通过各种JSON属性搜索父节点而不是关键本身。

答案 1 :(得分:-1)

Couchbase 2.2中无法提供您问题中所述的请求功能。正如我最近在another answer上发布的那样,您需要执行多个视图查询来构建结果集(这不是什么大问题,因为查询在couchbase中非常快)。

另外,我应该指出视图不应该包含你的整个对象(它会完全破坏视图的目的)。因此,您的架构根本不需要视图 - 您查询CB的父对象,并且父级包含子对象的所有文档ID。如果需要子对象,则需要查询它们。

顺便说一句,我很高兴CB不支持您的要求,因为它可能会通过过度思考设计而导致滥用平台。要脱掉你的SQL服务器帽子 - CB中的多个查询是最佳和首选的。