【问题标题】:couchbase filtering multiple fieldscouchbase 过滤多个字段
【发布时间】:2013-07-01 11:31:13
【问题描述】:

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

  • 产品编号

  • 类别 ID

  • ProductTypeId

  • 价格

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

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

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

【问题讨论】:

    标签: couchbase


    【解决方案1】:

    在 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 定义为Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable。或者你可以改变你的数据模型......

    【讨论】:

      【解决方案2】:

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

      在线尝试N1QL tutorial

      【讨论】:

      • 虽然这将是未来的正确答案,但 N1QL 不在当前版本的 couchbase 服务器中。希望 N1QL 附带的二级索引功能也能帮助解决这个问题。
      猜你喜欢
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多