Mapreduce 使用“;其中”;动态子句
我有以下格式的Json文档Mapreduce 使用“;其中”;动态子句,mapreduce,couchbase,couchbase-view,Mapreduce,Couchbase,Couchbase View,我有以下格式的Json文档 Name : Class : City : Type : Age : Level : Mother : Father : 我有一个像这样的映射函数 function(doc,meta) { emit([doc.Name,doc.Age,doc.Type,doc.Level],null); } 我能做的是给出“姓名”并过滤掉所有结果,但我也想做的是只给出“年龄”并过滤掉。因为couchbase不提供跳过“Name”键的功能。所以我必须创建一个新的map函数,
Name :
Class :
City :
Type :
Age :
Level :
Mother :
Father :
我有一个像这样的映射函数
function(doc,meta)
{
emit([doc.Name,doc.Age,doc.Type,doc.Level],null);
}
我能做的是给出“姓名”并过滤掉所有结果,但我也想做的是只给出“年龄”并过滤掉。因为couchbase不提供跳过“Name”键的功能。所以我必须创建一个新的map函数,它的第一个键是“Age”,但我也必须只查询“Level”键,也是这样。我必须为每个字段创建许多映射函数,这显然是不可行的,所以除了创建新的映射函数来实现这类功能之外,我还能做些什么?
我不能使用n1ql,因为我有1.5亿个文档,所以需要花费很多时间。首先,这不是一个很好的reduce函数
{
"name": "Roi",
"age": 31
}
我可以向索引发出两个值:
function (doc, meta) {
if (meta.type=="json") {
emit(doc.name, null);
emit(doc.age, null);
}
}
现在我可以按2个值进行查询。
这比创建两个视图要好得多
不管怎么说,如果你有什么东西可以过滤的话——这总是被推荐的。首先,这不是一个很好的reduce函数
{
"name": "Roi",
"age": 31
}
我可以向索引发出两个值:
function (doc, meta) {
if (meta.type=="json") {
emit(doc.name, null);
emit(doc.age, null);
}
}
现在我可以按2个值进行查询。
这比创建两个视图要好得多
不管怎样,如果你有什么东西可以过滤的话,我们总是建议你这样做。我的错误,我在帖子中写了不正确的标题函数。无论如何,多个emit不能解决我的问题,因为假设我有两个像这样的emit(doc.age,null)emit(doc.level,null);现在我将1值传递给key,以过滤所有年龄为1的文档。但它也会给我那些1级的文件。因此,当两个字段具有相同的值时,多个emit不会有帮助。您可以在它前面附加字符串,例如:
function(doc,meta){if(meta.type==“json”){emit(“name”+doc.name,null);emit(“age”+doc.age,null);}
我的json文档格式是什么?像这样的“name”:“name\u legendary”`它不会影响您的JSON(数据)。您的文档将保持不变。唯一会改变的是您的视图,它们查询您可以作为键访问的字符串。您将能够正常地引用原始文档。Okat thanx此方法有效。但是还有其他更动态的方法吗,比如我有20个列,为了让这个方法工作,我必须对每个组合进行发射,所以会有很多组合。有没有像n1ql中的where子句那样更通用的方法?我的错误,我在帖子中写了不正确的头函数。无论如何,多个emit不能解决我的问题,因为假设我有两个像这样的emit(doc.age,null)emit(doc.level,null);现在我将1值传递给key,以过滤所有年龄为1的文档。但它也会给我那些1级的文件。因此,当两个字段具有相同的值时,多个emit不会有帮助。您可以在它前面附加字符串,例如:function(doc,meta){if(meta.type==“json”){emit(“name”+doc.name,null);emit(“age”+doc.age,null);}
我的json文档格式是什么?像这样的“name”:“name\u legendary”`它不会影响您的JSON(数据)。您的文档将保持不变。唯一会改变的是您的视图,它们查询您可以作为键访问的字符串。您将能够正常地引用原始文档。Okat thanx此方法有效。但是还有其他更动态的方法吗,比如我有20个列,为了让这个方法工作,我必须对每个组合进行发射,所以会有很多组合。有没有像n1ql中的where子句那样更通用的方法?