2

我有一个“产品”文档,它有一个属性“categoryId”来引用“类别”文档。当我获取产品时,我希望能够获取类别的名称,而不仅仅是 id。我知道我应该为此创建一个视图,但我是 couchbase 的新手,我在 google 中环顾四周,但找不到具体的操作方法。

这将是产品文档

{
    "id": 1,
    "name": "Guitar",
    "categoryId": 5,
    "jsonType": "product",
    ... (other fields)
}

这将是类别文件

{
     "id": 5,
     "name": "Musical Instruments",
     "description": "",
     "jsonType": "category"
}

谢谢!

4

2 回答 2

1

您在这里尝试做的是在 Couchbase 上创建内部连接。现在,您的问题并未完全指定数据的输出格式,但我认为这里存在一些设计冲突。当您希望组合的所有内容都位于同一个文档中时,文档数据库确实工作得最好。从本质上讲,这看起来像是放入非关系数据库中的关系设计 - 可以说是圆孔中的方形钉。

话虽如此,我将探索使用 N1QL(“镍”)查询来完成此任务。虽然我还没有使用 N1QL 工具(因为我将我的数据库设计为不需要连接等),但它显示出了希望,特别是对于小型数据集。 http://docs.couchbase.com/prebuilt/n1ql/n1ql-dp3/#join.html

另一种选择是使用 Web 服务逻辑来执行并发查找并交付结果。一旦您能够提供有关您的应用程序的更多详细信息,我就可以用我的方法来帮助解决您的问题。

我在这里回答了一个非常相似的问题- 看看这是否有帮助。

于 2014-10-22T12:16:11.517 回答
1

我不知道你对这些数据的所有访问模式,但如果这个特定的模式很关键,为什么不把类别名称放在产品文档中呢?对于类别名称的键,如果您确实需要获取该特定对象,请使其有意义。这样做也不会大大增加文档的大小。在 Couchbase 中,对象的键可以是 250 字节,因此使用它们来创建一个键,您的应用程序可以根据它所拥有的信息创建该键。例如,上面的类别文档的键是“category::Musical-Instruments”。然后,如果您的产品文档已嵌入,它可以通过键快速获取该类别的详细信息,或者如果您只想要类别的全名,您的应用程序会切掉 category:: 并将 - 替换为空格. 或任何你想这样做的方式。

上面的另一个选项和一个轻微的变体是让产品文档中的类别键是一个键数组(如果您的产品可能需要属于多个类别),并且类别文档的键再次是有意义的,并且是您的app 可以根据需要进行解析。

总之, "id" : 5 是有效的,但 Couchbase 为您提供了使事情对您的应用有意义的方法,并且即使在规模上也可以允许超快速查找。这是我很可能会走的路线,也是我建议您考虑以最终解决您的问题的方法。我建议阅读这篇博文以获取更多关于这些方面的信息。

于 2014-10-23T21:03:11.623 回答