gpt4 book ai didi

javascript - CouchDB/Couchbase View 按键数排序

转载 作者:行者123 更新时间:2023-11-30 18:05:19 25 4
gpt4 key购买 nike

我正在尝试编写一个 View ,显示我的系统中使用的前 10 个标签。在 reduce 函数中使用 _count 获取数量相当容易,但这不会按数字对列表进行排序。有什么办法吗?

function(doc, meta) {
if(doc.type === 'log') {
emit(doc.tag, 1);
}
}
_count

因此,我希望:

  • 标签 3 10
  • 标记 1 7
  • 标记 2 3
  • ...

代替

  • 标记 1 7
  • 标记 2 3
  • 标签 3 10

最重要的是,我不想将整个集合传输到我的应用程序服务器并在那里进行处理。

最佳答案

在 couchbase 中,你无法在 reduce 中/之后对结果进行排序,因此你无法直接获得某些内容的“前 10 名”。在 couchbase View 中,值总是按键排序。最好的方法是:

  1. 查询返回键值对的 View :tag_name - count_valuetag_name 排序
  2. 创建每 N 分钟运行一次的作业,从 [1] 获取结果,对它们进行排序,并将排序后的结果写入单独的键(即“Top10Tags”)。
  3. 在您的应用中查询关键的 Top10Tags。

这可以减少流量,但结果可能会过时。您还可以在 couchbase 运行的同一台服务器上创建该“作业”(即编写小型 node.js 应用程序或其他东西),它只计算环回流量和每 N 分钟进行一次排序的少量 cpu。

此外,如果您使用 _count reduce 函数,则不需要发出任何数字,只需使用 null:

function(doc, meta) {
if(meta.type === "json" && doc.type === 'log') {
emit(doc.tag, null);
}
}

如果你想用多个标签标记文档,比如

{
"type": "log",
"tags": ["tag1","tag2","tag3"]
}

你的 map 函数应该是:

function(doc, meta) {
if(meta.type === "json" && doc.type === 'log') {
for(var i = 0; i < doc.tags.length; i++){
emit(doc.tags[i], null);
}
}
}

关于 top10 列表的另一件事。如果您不想将其存储在磁盘上,则可以将其存储在 memcache 存储桶中。

关于javascript - CouchDB/Couchbase View 按键数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15958991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com