我有以下格式的 Json 文档
Name :
Class :
City :
Type :
Age :
Level :
Mother :
Father :
我有这样的地图函数
function(doc,meta)
{
emit([doc.Name,doc.Age,doc.Type,doc.Level],null);
}
我能做的是给出"名称"并过滤掉所有结果,但我也想做的是只给出"年龄"并过滤掉它。为此,couchbase 不提供跳过"名称"键的功能。所以我必须创建一个以"年龄"作为第一个键的新地图函数,但我也必须像这样只查询"级别"键。我必须为每个字段创建许多地图函数,这显然是不可行的,那么除了制作新的地图函数来实现这种类型的功能之外,我还能做些什么吗?我不能使用 n1ql,因为我有 1.5 亿个文档,所以需要很多时间。
首先 - 这不是一个非常好的reduce函数。
- 它没有任何过滤 函数
- 头应该是函数(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 个视图要好得多。
无论如何,如果您有要过滤的内容 - 始终建议您这样做。