couchbase过滤多个字段

标签 couchbase

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

  • 产品 ID

  • 类别ID

  • 产品类型ID

  • 价格

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

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

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

最佳答案

在 couchbase 中,简单 View 只能有一个索引,因此您无法使用它按 2 个或更多字段进行过滤。 couchbase 中也有具有二维索引的空间 View ,但是

Geospatial support was introduced as an experimental feature in Couchbase Server 2.0. This feature is currently unsupported and is provided only for the purposes of demonstration and testing.

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

第二种变体:您可以在以下位置创建类似“CategoryID:ProductTypeID”(即 1:10, 1:12, 5:10, 5:12, 7:10, 7:12)的对应用程序端并创建也生成该对的 View (即 emit(doc.catId + ":"+ doc.prodTypeId))并查询它。

第三种变体(我更喜欢):使用关系数据库。我计算出您的 Product 中有 3 个关系,其中包含 4 个字段 - 为 75%,您已经拥有了关系数据模型! NoSQL 定义为Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable 。或者您可以更改您的数据模型...

关于couchbase过滤多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17403450/

相关文章:

node.js - 如何在 Nodejs 和 Express 中重用数据库连接

ubuntu - Couchbase 服务器崩溃 - ubuntu 12.04

cassandra - 如何对Key-Value存储中的两个数据集进行交集运算?

spring-boot - Couchbase 的 Spring Data - 数据库中的计数元素

mapreduce - 在 couchbase 中编写 reduce 函数

Couchbase 过滤器上的二级索引

javascript - node.js 在插入到 couchbase 后永远不会退出,这与大多数 Node 问题相反

nosql - 用于聊天历史持久化和用户统计的 CouchDB

mongodb - 繁重的数学查询和 NoSQL 数据库

java - 如何在 Spring Boot 中通过代码创建 couchbase 存储桶