【问题标题】:CouchDB sorting by linked doc propertyCouchDB 按链接的文档属性排序
【发布时间】:2015-05-06 08:53:20
【问题描述】:

我有以下数据:

payment1: {
    id: "payment1",
    categoryId: "category1"
}

payment2: {
    id: "payment2",
    categoryId: "category2"
}

payment3: {
    id: "payment3",
    categoryId: "category2"
}

category1: {
    id: "category1",
    name: "Food"
}

category2: {
    id: "category2",
    name: "Leisure"
}

我需要一个按类别 NAME 对支付数据进行排序的视图。在 CouchDB 中可以吗?

提前致谢! 伊万

【问题讨论】:

    标签: javascript mapreduce couchdb


    【解决方案1】:

    可能的和你想要的有点不同。

    这是地图:

    function (o) {
      if (o.categoryId) {
        emit(o.categoryId);
      } else {
        emit(o.id);
      }
    }
    

    您将使用/mydb/_design/mydesign/_view/myview?include_docs=true 调用它并获取:

    {"rows":[
       {"key":"category1", "doc":{"id":"payment1","categoryId":"category1"},
       {"key":"category1", "doc":{"id":"category1","name":"Food"},
       {"key":"category2", "doc":{"id":"payment2","categoryId":"category2"},
       {"key":"category2", "doc":{"id":"payment3","categoryId":"category2"},
       {"key":"category2", "doc":{"id":"category2","name":"Leisure"}
    ]}
    

    换句话说,付款是按类别分组的,它们还与类别名称相连。但是,它们是根据类别 ID 而非类别名称排序的。

    你想要的需要两种不同的类型(即“链式映射减少”)。

    【讨论】:

    • 感谢您的回复。您能否提供一个参考类别付款案例的链式地图减少示例?我是 CouchDB 的新手... :)
    • 有可能不是通过 categoryId 而是通过类别名称来链接付款和类别,并且在视图中只是将类别名称作为键发出。但是,在更改类别名称后,您必须更新与该特定类别相关的所有付款。这有点棘手,但它有效。 :)
    • Chained map reduce 存在于名为CloudAnt 的 CouchDB 的 fork 中,但尚未出现在稳定的官方版本中。
    • 解决问题的一种非常常见的方法是尽可能使用名称作为参考,而不是使用外部文档的 ID。 MapReduce 的做事方式是从原始数据建立索引。不必首先对数据进行规范化。这确实是一种范式转变,甚至会对用户界面产生影响。
    • 这就是为什么你经常不能改变你的手柄例如推特几次:-)
    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    相关资源
    最近更新 更多