如何在PouchDB mapreduce中按长度对密钥进行排序?

问题描述 投票:0回答:1

我正在研究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并从中建立路径。

javascript mapreduce pouchdb
1个回答
0
投票
(原始设计只有叶子路径。)>

我也将序列化路径设置为文档_id

现在我正在使用芒果查询来完成搜索:

db.find({ selector: { _id: { $gt: search, $lte: `${search}\uFFF0`, }, depth: { $gt: null }, }, sort: ['depth'], limit: MAX_RESULTS, })

它有效,但是要花几秒钟才能返回。

© www.soinside.com 2019 - 2024. All rights reserved.