考虑到:
doc个人资料
{
_id:"1",
name:"john",
likes: ["2222","1111"]
}
doc喜欢
{
_id:"2222",
value:"true"
}
{
_id:"1111",
value:"false"
}
我的xamarin应用程序上有一个过滤器来获取配置文件,它运行良好,但我需要包含"孩子" (链接)文档...我可以使用视图设置include_docs = true来执行此操作,但我希望couchdb过滤,以便我可以使用复制。 此外,如果我可以使用reduce函数来过滤数据,则可以实现相同的结果,但是我不能使过滤器使用reduce函数。那么,任何想法?
预期结果将是:
doc个人资料
{
_id:"1",
name:"john",
likes: {
{_id:"2222",
value:"true"},
{_id:"1111",
value:"false"]
}
}
谢谢!
答案 0 :(得分:1)
我可以使用视图设置include_docs = true来执行此操作但我希望couchdb过滤以便我可以使用复制
您可能已经知道这一点但可以使用couchdb views as filters。
此外,如果我可以使用reduce函数来过滤数据
,则可以实现相同的结果
reduce函数用于减少" map函数返回的值。 map函数返回一个键和一个值,如下所示:
emit(key,value)
reduce函数仅获取从map函数返回的键和值。例如,如果使用
调用视图 ?key=abc
并返回
之类的结果[{
_id:...,
type: abc
},
{
_id:...,
type:abc
}
....
]
您已经按键" abc"过滤了所有文件。 reduce函数将获取键,值和rereduce参数作为输入。如果使用reduce函数作为后映射处理步骤来进一步过滤视图中的结果,则会出现两个问题:
无法将参数传递给reduce。您指定的键仅由map函数使用,然后按原样传递以进行缩减。
无论如何,这不是一个好主意。使用reduce时,您希望返回一个小值,该值汇总从视图中获得的结果。因此,如果您返回上面的示例,则将一个整数表示为map函数( in emit(key,value)//suppose that the value is an integer)
中的值,reduce函数可以返回这些值的总和或汇总。但是尝试返回修改后的文档并不是reduce函数的用途。来自the docs
" reduce函数必须将输入值减小到较小的输出值。如果要在reduce中构建复合返回结构,或仅转换值字段,而不是对其进行汇总,则可能会滥用此功能。 "
List functions可能更适合您要做的事情。如果要在返回视图查询之前处理它们的结果,那么它们就是可行的方法。
在列表函数中,您将获得视图函数返回的一组结果。如果您想在其上应用复杂的过滤器,您甚至可以传递其他参数。但是你无法使用列表函数进行复制。
最后复制适用于文档级别。文档具有_rev字段,复制器进程使用这些字段来检查在执行复制之前文档的版本。因此,您无法复制视图返回的结果。仅复制文档。