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 函数。
- 它没有任何过滤
- 函数头应该是 function(doc, meta)
- 如果您混合了 json 和二进制对象 - 添加 meta.type == "json"
现在您可以做的事情:
- 如果您使用的是 v4 及更高版本(更推荐 v4.1),您可以使用 N1QL 并且使用它与 SQL 语言非常相似。 (我不明白为什么你不能使用n1ql)
- 您可以按多个顺序发出多个项目
即如果我有
格式的文档
{
"name": "Roi",
"age": 31
}
我可以向索引发送两个值:
function (doc, meta) {
if (meta.type=="json") {
emit(doc.name, null);
emit(doc.age, null);
}
}
现在我可以通过 2 个值进行查询。
这比创建 2 个视图要好得多。
无论如何,如果您有筛选依据 - 始终建议这样做。
我有 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 函数。
- 它没有任何过滤
- 函数头应该是 function(doc, meta)
- 如果您混合了 json 和二进制对象 - 添加 meta.type == "json"
现在您可以做的事情:
- 如果您使用的是 v4 及更高版本(更推荐 v4.1),您可以使用 N1QL 并且使用它与 SQL 语言非常相似。 (我不明白为什么你不能使用n1ql)
- 您可以按多个顺序发出多个项目
即如果我有
格式的文档{
"name": "Roi",
"age": 31
}
我可以向索引发送两个值:
function (doc, meta) {
if (meta.type=="json") {
emit(doc.name, null);
emit(doc.age, null);
}
}
现在我可以通过 2 个值进行查询。 这比创建 2 个视图要好得多。
无论如何,如果您有筛选依据 - 始终建议这样做。