使用reduce函数/链接文档的Couchdb过滤器
考虑到: 文档配置文件使用reduce函数/链接文档的Couchdb过滤器,couchdb,xamarin.forms,couchdb-futon,Couchdb,Xamarin.forms,Couchdb Futon,考虑到: 文档配置文件 { _id:“1”, 姓名:“约翰”, 喜欢:[“2222”,“1111”] } 博士喜欢 { _身份证号码:“2222”, 价值:“真实” } { _id:“1111”, 值:“false” } 我在我的xamarin应用程序上有一个过滤器来获取配置文件,它工作得很好,但我需要包括“儿童”(链接)文档。。。我可以通过视图设置include_docs=true来实现这一点,但我希望couchdb进行筛选,以便使用复制。 另外,如果我可以使用reduce函数来过滤数据,那么
{
_id:“1”,
姓名:“约翰”,
喜欢:[“2222”,“1111”]
}
博士喜欢
{
_身份证号码:“2222”,
价值:“真实”
}
{
_id:“1111”,
值:“false”
}
我在我的xamarin应用程序上有一个过滤器来获取配置文件,它工作得很好,但我需要包括“儿童”(链接)文档。。。我可以通过视图设置include_docs=true来实现这一点,但我希望couchdb进行筛选,以便使用复制。
另外,如果我可以使用reduce函数来过滤数据,那么也可以实现相同的结果,但是我不能让过滤器使用reduce函数。。你知道吗
预期结果将是:
文档配置文件
{
_id:“1”,
姓名:“约翰”,
喜欢:{
{u id:“2222”,
值:“true”},
{u id:“1111”,
值:“false”]
}
}
谢谢
我可以通过视图设置include_docs=true来实现这一点,但我希望couchdb进行筛选,以便使用复制
您可能已经知道这一点,但可以使用
此外,如果我可以使用reduce函数来过滤数据,也可以实现相同的结果
reduce函数用于“减少”map函数返回的值。map函数返回一个键和一个值,如下所示:
emit(键、值)
reduce函数只获取map函数返回的键和值
?key=abc
它返回的结果如下
[{
_id:...,
type: abc
},
{
_id:...,
type:abc
}
....
]
您已经使用“abc”键筛选了所有文档。reduce函数将获取键、值和reduce参数作为输入。如果将reduce函数用作后期映射处理步骤,以进一步筛选视图中的结果,则将出现两个问题:
(在emit(key,value)//中)返回一个整数作为值,则以上面的示例为例
reduce函数可能返回这些值的总和或总和。但是尝试返回修改过的文档不是reduce函数的目的。从最后,复制在文档级别上工作。文档具有_rev字段,在执行复制之前,replicator进程将使用这些字段检查文档的版本。因此,您将无法复制视图返回的结果。只有文档才会被复制。感谢您提供的非常有用的信息!我不想这样做o使用复制,但如果我不能使用它,我可以使用什么?REST?或者有其他方法吗?很高兴您发现它很有用。复制有很多用途。很好地概述了它的用途。在这种情况下,绝对不建议使用列表作为过滤器。当配置文件运行时,这将导致严重的性能问题t引发。相反,具有多部分键的视图是一个可靠的解决方案。索引只能基于配置文件文档。视图映射函数将为每个文档发出几次“父级”的一行配置文件文档,每个喜欢的项目也有一行。最后一个小技巧使它变得完美-在喜欢的行的值中发出属性
\u id
。然后这一行将有原始的喜欢的文档(而不是配置文件文档)当使用include\u docs=true
时附加。与视图相比,列表函数的性能很好。