Couchbase 视图动态使用“WHERE”子句

Couchbase view using “WHERE” clause dynamically

我有 Json 个格式如下的文档

Name :
Class :
City :
Type :
Age :
Level :
Mother :
Father :

我有这样的地图功能

function(doc,meta)
{
    emit([doc.Name,doc.Age,doc.Type,doc.Level],null);
}

我能做的是给出 "name" 并过滤掉所有结果,但我也想做的是只给出 "age" 并过滤掉它。因为 couchbase 不提供跳过 "Name" 键的功能。所以我必须创建一个新的地图函数,它将 "Age" 作为第一个键,但我也必须只查询 "Level" 键,就像这样。我必须为每个字段创建许多地图函数,这显然是不可行的,那么除了创建新的地图函数来实现此类功能之外,我还能做些什么吗? 我不能使用 n1ql,因为我有 1.5 亿个文档,所以这会花费很多时间。

首先 - 这不是一个很好的 reduce 函数。

  1. 它没有任何过滤
  2. 函数头应该是 function(doc, meta)
  3. 如果您混合了 json 和二进制对象 - 添加 meta.type == "json"

现在您可以做的事情:

  1. 如果您使用的是 v4 及更高版本(更推荐 v4.1),您可以使用 N1QL 并且使用它与 SQL 语言非常相似。 (我不明白为什么你不能使用n1ql)
  2. 您可以按多个顺序发出多个项目

即如果我有

格式的文档
{
  "name": "Roi",
  "age": 31
}

我可以向索引发送两个值:

function (doc, meta) {
  if (meta.type=="json") {
    emit(doc.name, null);  
    emit(doc.age, null);
  }
}

现在我可以通过 2 个值进行查询。 这比创建 2 个视图要好得多。

无论如何,如果您有筛选依据 - 始终建议这样做。