Couchdb 列表函数是否适合我的场景?

Couchdb 列表函数是否适合我的场景?,couchdb,Couchdb,我在couchDb中有一个视图,定义如下 function (doc) { if (doc.url) { var a = new Date(doc.postedOn); emit([a.toLocaleDateString(), doc.count, doc.userId], { _id: doc.userId, postTitle: doc.postTitle, postSummary: doc.postSummar

我在couchDb中有一个视图,定义如下

 function (doc) {
 if (doc.url) {
     var a = new Date(doc.postedOn);
     emit([a.toLocaleDateString(), doc.count, doc.userId], {
         _id: doc.userId,
         postTitle: doc.postTitle,
         postSummary: doc.postSummary,
         url: doc.url,
         count: doc.count
     });
  }
};
这将以我想要的格式提供结果。首先按日期排序,然后按计数排序,然后按用户ID排序

但是我在查询它时遇到了问题。我想要的是只通过userId查询这个视图。也就是说,将日期和count参数保留为null

 _view/viewName?limit=20&descending=true&endkey=["","","userId"]
没有给我想要的结果

我应该用它来过滤视图的结果吗?如果我这样做会对性能产生影响吗

第一节的这段引述让我想到,列表函数可以用来过滤和聚合结果

强大的迭代器API允许灵活地动态过滤和聚合行,以及输出原始转换,以便轻松制作Atom提要、HTML列表、CSV文件、配置文件,甚至修改JSON


列表函数与您的案例无关。从您链接到自己的文档中:

  • 虽然显示函数用于自定义文档表示,但列表函数用于相同的目的,但与查看函数和结果相反

  • Show函数用于以各种格式表示文档,通常是具有更好格式的HTML页面。它们还可以用于运行服务器端功能,而不需要预先存在的文档

要解决您的问题,只需更改发出键的顺序,将
userId
放在第一位,即:

[ doc.userId, a.toLocaleDateString(), doc.count ]
并适当地更新您的查询


如果更改发出的键的顺序不是一个选项,只需创建另一个视图。

不,它仍然不起作用。即使在更新视图后,查询userId也没有任何效果。就像之前一样,所有userId的结果都会按日期和计数排序返回。我是不是查询错了?@AkshatJiwanSharma很可能是这样。检查您是否是。我必须用{}像这样的viewName来查询空字符串?startkey=[userId,{}如果您想通过
userId
进行查询,为什么它是您发出的
键中的最后一个值?CouchDB不支持使用通配符的查询(您的查询仅在前两个值为
“”
)时才起作用。我想创建特定的排序顺序。首先按日期,然后按计数,然后按id。正如@NikitaVolkov所建议的,我已更改了我的视图。我注意到的另一件事是,不是传递两个“我应该传递{}”.似乎有效,但我不知道为什么。一旦我确定,我会补充一个答案。