与这两个 CouchDB 问题非常相似:3311225 https://stackoverflow.com/questions/3311225/couchdb-sorting-and-filtering-in-the-same-view and 8924793 https://stackoverflow.com/questions/8924793/couch-db-filter-by-key-and-sort-by-another-field,除了这些方法不允许部分匹配。具有例如这些条目:
[{_id: 1, status: 'NEW', name: 'a'},
{_id: 2, status: 'NEW', name: 'aab'},
{_id: 3, status: 'NEW', name: 'ab'},
{_id: 4, status: 'NEW', name: 'aaa'},
{_id: 5, status: 'NEW', name: 'aa'}]
and key
[status, name, _id]
似乎没有办法
- 过滤这些条目status(完整字符串匹配)和name(部分字符串匹配~
startsWith
)
- 按以下顺序排序id
- 对它们进行分页
因为部分字符串匹配name. The 高值 unicode 字符 \uffff http://couchdb.readthedocs.io/en/latest/couchapp/views/collation.html#string-ranges允许这种部分匹配也会导致忽略_id
键的一部分,这意味着结果条目不按以下顺序排序_id
,而是按地位和姓名。
var status = 'NEW';
var name = 'aa'
var query = {
startkey: [status, name],
endkey: [status, name + '\uffff', {}],
skip: 0,
limit: 10
};
结果是
[{_id: 5, status: 'NEW', name: 'aa'},
{_id: 4, status: 'NEW', name: 'aaa'},
{_id: 2, status: 'NEW', name: 'aab'}]
没有在内存中排序的选项,因为这只会对各个页面进行排序,而不是对整个数据集进行排序。对此有什么想法吗?