【问题标题】:CouchDB View Sort by ValueCouchDB 视图按值排序
【发布时间】:2020-06-25 20:09:46
【问题描述】:

我正在寻找一种性能不佳的解决方案来按值对我的 couchdb 视图进行排序(因为数据量很大)。我在我的 NodeJS 应用程序上使用“nano”包来获取数据库/视图连接。

我创建了一个 CouchDB View Map Function 配置一个键值对和 Reduce 到 _count:

function (doc) {
  emit(doc.msg, 1);
}

要获得我正在使用的视图:

alice.view('VIEWNAME', 'INDEXNAME', {'group': true).then((body) => { 
body.rows.forEach((doc) => {
  console.log(doc.key + " " + doc.value);
 }
}

视图返回例如“Hello”作为 doc.key 和“155”作为 doc.value。因此,我有 155 个带有 Key Hello 的文档。 现在我想从值中对我的视图 DESC 进行排序:

Hello 155
Foo   140
Bar   100

但我的视图的唯一排序版本是按键,我的视图按按键 ASC 排序。

我在 NodeJS 方面尝试了薮猫解决方案,但我不想失去太多性能。

【问题讨论】:

    标签: node.js sorting couchdb nano couchdb-nano


    【解决方案1】:

    你不能这样做。从本质上讲,视图仅按关键字排序。解决方案是创建按不同键排序的第二个视图。

    【讨论】:

    • 感谢您的回答...问题是在我的数据库中,我的值始终为 1。在 group 函数之后,值被计算
    • 我不确定是什么问题。您可以在 map 函数中使您的值成为您想要的任何值。 emit(doc.value) 或其他。 (顺便说一句,可能永远没有理由为所有文档发出 1 的值。如果您的目标是计数,那么有内置函数可以为您做到这一点)
    【解决方案2】:

    我在 NodeJS 端构建了一个工作:

    body.rows.sort(function (a, b) {
        return parseInt(b.value,10) - parseInt(a.value,10);
    });
    

    我不是 100% 满意,但解决方案帮助了我。我仍然无法估计排序在 NodeJS 方面需要多少性能

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-04
      • 2012-12-13
      • 2016-01-25
      • 2012-07-03
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多