2

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

  • 产品编号

  • 类别 ID

  • 产品类型 ID

  • 价格

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

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

最好的方法是查看每个字段,使用键(例如by_categoryId?keys=[1,5,7])将 IN 作为查询运行,然后在应用程序代码中插入结果?还是有更好的方法来做到这一点?(我认为我不能使用范围查询,因为数组元素不会是连续的)。

4

2 回答 2

2

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

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

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

第二个变体:您可以在应用程序端创建像“CategoryID:ProductTypeID”(即1:10, 1:12, 5:10, 5:12, 7:10, 7:12)这样的对,并创建生成该对的视图(即emit(doc.catId + ":" + doc.prodTypeId))并查询它。

第三种变体(我更喜欢):使用关系数据库。我Product用 4 个字段计算了你的 3 个关系——占 75%,你有关系数据模型!NoSQL 的定义是下一代数据库,主要解决一些问题:非关系型、分布式、开源和水平可扩展。或者你可以改变你的数据模型......

于 2013-07-01T14:01:50.997 回答
0

您可以使用 Couchbase (v3) 中的新 N1Q1 查询语言。您可以在查询中表达所有“WHERE”条件,而无需创建任何视图。

尝试在线N1QL 教程

于 2014-09-10T21:41:04.787 回答