我在沙发数据库中有一个视图,该视图将某个文档属性公开为键:
function (doc) {
if (doc.docType && doc.docType === 'CARD') {
if (doc.elo) {
emit(doc.elo, doc._id);
} else {
emit(1000, doc._id);
}
}
}
我有兴趣在此数据库中查询(例如)25个文档的键最接近给定输入的文档。我唯一想做的就是设置搜索范围并进行重复查询,直到得到足够的结果:
// pouchdb's query fcn
function getNresultsClosestToK(key: number, limit: number) {
let range = 20;
do {
cards = await this.db.query('elo', {
limit,
startkey: (key - range).toString(),
endkey: (key + range).toString()
});
range += 20;
} while (cards.rows.length < limit)
return cards;
}
但是这可能需要打几个电话,效率很低。有没有一种方法可以将单个密钥和限制传递到沙发上,并使其返回最接近所提供密钥的limit
文档?
如果我理解正确,您想查询一个特定的键,然后在键之前返回12个结果,键本身,在键之后返回12个结果,总共25个结果。
最直接的方法是对视图进行两次查询,并正确组合startkey
,limit
和descending
值。
例如,要获取密钥本身及其后的12个值,请使用以下选项选择query your view:
然后获得键之前的12个条目,使用以下选项执行查询:
这将为您提供两个结果集,每个结果集(最多)有13个项目。请注意,您的目标键将重复(在每个结果集中)。然后,您需要组合两个结果集。
注意,这确实有一些限制:
如果您有重复的键,则可能会得到意外的结果。特别是: