【发布时间】:2020-01-11 01:04:00
【问题描述】:
我正在使用 React app 来搜索 IPFS 中托管的集合。
我正在使用 PouchDB 来存储路径和 IPFS id 之间的映射。我正在处理的界面是自动完成的。我数据库中的每个对象都类似于:
{
path: ['path', 'to', 'blob'],
ipfs_id: 'Qem4u234jk34k…',
}
我有一个设计文档,可以打印出所有通往条目的子路径:
const ddoc = {
views: {
all: {
// emit confuses webpack in production
map: (
'function(doc) {'
+ 'for(i in doc.path) {'
+ 'var path = doc.path.slice(0,i+1).join("/");'
+ 'emit(path, null);'
+ '}'
+ '}'
),
reduce: function(keys, values, rereduce) {
return 1 // uniqueness
}.toString(),
},
},
}
我的自动完成看起来像:
db.query(
'paths/all',
{
startkey: search,
endkey: `${search}\uFFFF`,
limit: 25,
group: true,
}
)
我想按长度对键进行排序,以便首先完成部分完成。
我目前的理解是这是不可能的,我需要切换到将路径长度存储在对象中并为中间路径创建文档。然后我可以使用 sort 进行 Mango $gte 查询。
或者,我可以尝试 storing hierarchical data 中的一些方法,但我的路径元素不是全局唯一的,因此我必须分配节点 GUID 并从中构建路径。
【问题讨论】:
-
您的搜索词是否包含路径分隔符?
标签: javascript mapreduce pouchdb