couchbase过滤多个字段

时间:2013-07-01 11:31:14

标签: couchbase

当我正在过滤的值不连续时,我正在尝试找出在CouchBase中过滤多个字段的最佳方法。例如,如果我有一个名为产品的表格,其中包含以下字段:

  • 产品编号

  • 类别ID

  • ProductTypeId

  • 价格

我正在尝试实现这样的过滤器:

SELECT  * FROM Product WHERE CategoryID IN (1,5,7) AND ProductTypeId
IN (10, 12);

执行此操作的最佳方法是为每个字段创建一个视图,使用键(例如by_categoryId?keys=[1,5,7])将IN作为查询运行,然后将应用程序代码中的结果进行区分?或者有更好的方法吗? (我认为我不能使用范围查询,因为数组元素不是连续的。)

2 个答案:

答案 0 :(得分:2)

在couchbase中,简单视图只能有一个索引,因此您无法使用它来过滤2个或更多字段。在couchbase中还有具有二维索引的空间视图,但

  

地理空间支持是Couchbase Server 2.0中的一项实验性功能。此功能目前不受支持,仅用于演示和测试。

所以第一个变体:从一个字段中获取记录,从一个字段过滤产生较少的结果,然后在应用程序端,您可以按另一个字段过滤结果。

第二种变体:你可以在app端创建像“CategoryID:ProductTypeID”这样的对(即1:10, 1:12, 5:10, 5:12, 7:10, 7:12),也可以创建生成这些对的视图(即emit(doc.catId + ":" + doc.prodTypeId))并查询它。

第三种变体(我首选):使用关系数据库。我计算了Product中4个字段中的3个关系 - 它是75%,你有关系数据模型! NoSQL定义是Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable。或者你可以改变你的数据模型...

答案 1 :(得分:0)

您可以使用Couchbase(v3)中的新N1Q1查询语言。你可以表达你所有的" WHERE"查询中的条件,但没有创建任何视图。

在线试用N1QL tutorial