Я работаю над приложением React для поиска по коллекциям, размещенным в IPFS.
Я использую PouchDB для хранения сопоставлений между путями и идентификаторами IPFS. Интерфейс, над которым я работаю, является автозаполнением. Каждый объект в моей базе данных выглядит примерно так:
{
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,
}
)
Я хочу отсортировать ключи по длине, чтобы частичное завершение было первым.
В настоящее время я понимаю, что это невозможно, и мне нужно переключиться на сохранение длины пути в объекте. и создание документов для промежуточных путей. Тогда я мог бы выполнить запрос Man go $gte
с sort
.
В качестве альтернативы, я мог бы попробовать некоторые методы из хранения иерархических данных , но мои элементы пути не не является глобально уникальным, поэтому мне придется назначать узлы GUID и строить пути из них.