Couchbase - 获取id引用的文档的属性

时间:2014-10-16 13:54:44

标签: couchbase couchbase-view nosql

我有一个'产品'文档,其属性为&category;类别'引用'类别'文献。当我获取产品时,我希望能够获得该类别的名称,而不仅仅是id。我知道我应该为此创建一个视图,但我是沙发基地的新手,我已经在谷歌中四处寻找,但我无法确定如何做到这一点。

这将是产品文档

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

这将是类别文件

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

谢谢!

2 个答案:

答案 0 :(得分:1)

您要在此处尝试在Couchbase上创建内部联接。现在,您的问题并未准确指定数据的输出格式,但我认为这里存在一些设计冲突。当您要组装的内容都位于同一文档中时,文档数据库确实最有效。从本质上讲,这看起来像是一个非关系数据库中的关系设计 - 可以说是圆孔中的方形钉。

话虽这么说,我会探索使用N1QL("镍")查询来实现这一目标。虽然我还没有使用N1QL工具(因为我设计的数据库不需要连接等),但它显示出了希望,特别是对于小型数据集。 http://docs.couchbase.com/prebuilt/n1ql/n1ql-dp3/#join.html

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

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

答案 1 :(得分:1)

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

上面的另一个选项和一个轻微变体是让产品文档中的类别键是一系列键(如果您的产品可能需要在几个类别中),并且类别文档的键再次是有意义的以及如果需要,您的应用可以解析的内容。

总之,“id”:5是有效的,但Couchbase为您提供了使您的应用具有意义的方法,并且即使在规模上也可以实现超快速查找。这是我很可能会走下去的路线以及我建议您考虑最终解决问题的方法。我建议您阅读this blog post以获取更多信息。