Sorting CouchDb在一个视图中进行筛选和排序
我是CouchDb的新手。 我必须按日期筛选记录(日期必须介于两个值之间),并按名称或日期等对数据进行排序(这取决于用户在表中的选择)。 在MySQL中,它看起来像Sorting CouchDb在一个视图中进行筛选和排序,sorting,couchdb,Sorting,Couchdb,我是CouchDb的新手。 我必须按日期筛选记录(日期必须介于两个值之间),并按名称或日期等对数据进行排序(这取决于用户在表中的选择)。 在MySQL中,它看起来像 SELECT * FROM table WHERE date > "2015-01-01" AND date < "2015-08-01" ORDER BY name/date/email ASC/DESC 我尝试使用startkey和endkey筛选数据,但不确定如何以这种方式对数据进行排序: startkey=["
SELECT * FROM table WHERE date > "2015-01-01" AND date < "2015-08-01" ORDER BY name/date/email ASC/DESC
我尝试使用startkey和endkey筛选数据,但不确定如何以这种方式对数据进行排序:
startkey=["2015-01-01"]&endkey=["2015-08-01"]
我可以使用一个视图吗?或者,我必须根据我当前的订单字段[doc.date、doc.name、doc.email]、[doc.name、doc.date、doc.email]等创建一些键顺序视图
谢谢你的帮助 您可以通过两种方式使用列表函数: 1.)沙发视图按日期排序,您按e-amil=>排序,但请注意。请注意,要通过电子邮件进行排序,您必须在内存中保存所有项(即,只有在结果集很小的情况下才能进行排序) 2.)沙发视图是通过电子邮件排序的,列表功能会删除日期范围之外的所有内容(您只能在整个列表很小的情况下执行此操作,因此此列表很可能不好)
可能#1可以帮助您,正如塞巴斯蒂安所说,您需要在coach中使用list函数来实现这一点 仔细想想,MySQL就是这么做的。它的查询优化器将选择一个索引到您的表中,它将从该索引扫描一个范围,将它需要的内容加载到内存中,并执行查询逻辑 在coach中,视图是B树索引,列表函数可以实现所需的任何逻辑。它可以用来吐出HTML而不是JSON,但也可以用来过滤/排序视图的输出,最后仍然吐出JSON。它可能无法很好地扩展到数百万个文档,但MySQL也可能无法 因此,您的选择是塞巴斯蒂安强调的:
如果日期范围“非常有辨别力”(通过测试的文档很少),则选项1效果最佳;否则(大多数文档通过)选项2会更好。请记住,在从磁盘加载无用文档所需的时间内(选项2),您可以在内存中对数十个文档进行排序,只要它们适合内存(选项1)。此外,索引越多,使用的磁盘空间就越多,写入速度也就越慢。谢谢您的回答!
startkey=["2015-01-01"]&endkey=["2015-08-01"]