我正在研究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,
}
)
我想按长度对键进行排序,因此首先要完成部分完成。
我目前的理解是不可能的,我需要切换为将路径长度存储在对象中并为中间路径创建文档。然后我可以用$gte
进行芒果sort
查询。
或者,我可以尝试storing hierarchical data中的某些方法,但是我的路径元素不是全局唯一的,所以我将不得不分配节点GUID并从中建立路径。
我也将序列化路径设置为文档_id
。
db.find({
selector: {
_id: {
$gt: search,
$lte: `${search}\uFFF0`,
},
depth: { $gt: null },
},
sort: ['depth'],
limit: MAX_RESULTS,
})
它有效,但是要花几秒钟才能返回。