gpt4 book ai didi

couchdb - CouchDB 中的一个 View ,用于查找最近的零回复论坛主题

转载 作者:行者123 更新时间:2023-12-02 03:58:17 27 4
gpt4 key购买 nike

假设我们有一个假设论坛的以下数据模型:

// Post
{
"_id": 1,
"type": "post",
"text": "",
"timestamp": 1,
}

// Reply
{
"_id": 2,
"post_id": 1,
"type": "reply",
"text": "",
"timestamp": 2,
}
  • 所有回复都是平的(没有回复,所有回复都是帖子)
  • 过去的帖子和回复流是无限的

  • 理想情况下,我想找到 最近的线程没有任何回复。

    到目前为止,我有这些 map/reduce 函数:
    map: function(doc) {
    if (doc.type == "post") {
    emit(doc._id, 0);
    }
    if (doc.type == "reply") {
    emit(doc.post_id, 1);
    }
    },
    reduce: function(keys, vals, rereduce) {
    return sum(vals);
    }

    如果我运行它并按键分组,它会给我一个所有线程的列表,其中未回复的值为 0。到现在为止还挺好。

    但,
  • 鉴于流理论上是无界的,我无法在应用程序或 CouchDB 的列表/过滤器函数中对其进行排序或过滤,因为它们适用于返回的(并且已经被截断的)数据集;
  • 更改键或组级别会破坏我想要的分组,帖子 ID 必须是组键。


  • 问题:如何找到没有回复的 N 个最新线程,如何按帖子的时间戳对缩小 View 进行排序?

    更简单的问题:如果有没有回复的线程( bool 解决方案),我该如何找到?这意味着过滤缩减的 View ,以便只留下零值行。

    最佳答案

    我认为更简单的实现是为您添加额外的字段 reply_count ,
    默认为零,
    回复回复时,
    回复计数+=1

    来找零回复的帖子,
    map 功能可以很简单:

    function (doc) {
    if (doc.type == "post")
    {
    emit([doc.reply_count, doc.timestamp], null);
    }
    }

    询问 :
    descending=true
    startkey=[0,9999999999]
    endkey=[0,0]
    include_docs=true

    关于couchdb - CouchDB 中的一个 View ,用于查找最近的零回复论坛主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11630892/

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