gpt4 book ai didi

sorting - CouchDB 在同一 View 中排序和过滤

转载 作者:行者123 更新时间:2023-12-02 01:49:18 24 4
gpt4 key购买 nike

我正在尝试将 CouchDB 用于新应用程序,并且需要创建一个按多个字段排序并按多个字段过滤的 View 。这是一个示例文档,我省略了 _id 和 _rev 以节省打字时间。

{
"title": "My Document",
"date": 1279816057,
"ranking": 5,
"category": "fun",
"tags": [
"couchdb",
"technology"
],
}

从文档中,我了解到可以轻松创建按排名等字段排序的 View 。

function(doc) {
emit(doc.ranking, doc);
}

我还了解到,我可以轻松地按类别等字段进行过滤

function(doc) {
emit(doc.category, doc);
}

http://127.0.0.1:5984/database/_design/filter/_view/filter?key=%22fun%22

我的问题是我需要同时做很多这些事情。我想根据类别和标签进行过滤。我应该能够过滤到仅具有“fun”类别和“couchdb”标签的文档。我想对这些过滤结果进行排序,先按降序排列,然后按日期升序排列,然后按标题按字母顺序排列。

如何创建一个 View 来同时进行所有排序和过滤?

最佳答案

要在一个键中发出多条数据,您需要阅读 Complex Keys 。您很可能最终会 emit()'ing 一个键,该键是由类别和标签组成的数组。例如...

function(doc) {
for(var i = 0; i < doc.tags.length; i++)
emit([doc.category, doc.tags[i]], doc);
}

现在,当您查询 ?key=["fun", "couchdb"] 时,您将获得 fun 类别中标记为“couchdb”的所有项目。或者,如果您想要 fun 类别中的所有项目,无论其标签如何,那么您可以使用范围进行查询:?startkey=["fun"]&endkey=["fun", {}]。请记住,如果您的项目有多个标签,您将在结果中多次获得它(因为您为每个标签 emit() 处理了一次文档)。

要执行按评级、日期和标题排序的额外步骤,您需要向数组中添加两个元素:一个整数以及排名、日期或标题。请记住,每个 map 函数可以emit()多次。 map 功能示例...

function(doc) {
for(var i = 0; i < doc.tags.length; i++)
{
emit([doc.category, doc.tags[i], 0, doc.ranking], doc);
emit([doc.category, doc.tags[i], 1, doc.title], doc);
emit([doc.category, doc.tags[i], 2, doc.date], doc);
}
}

现在你的关键结构是:[“category”,“tag”,0 ... 2,rank/title/date]

您基本上将所有排名归为 0、标题归为 1、日期归为 2。当然,您要传输大量数据,因此您可以将每个分组分解为单独的 View 在您的设计文档中,或者仅返回文档的 _id 作为值 (emit([ ...], doc._id);)。

使用“couchdb”标签获取“fun”类别中的所有内容(升序):

?startkey=["fun", "couchdb"]&endkey=["fun", "couchdb", {}, {}]

使用“couchdb”标签获取“fun”类别中的所有内容(降序):

?startkey=["fun", "couchdb", {}, {}]&endkey=["fun", "couchdb"]&descending=true

仅获取带有 couchdb 标签的有趣类别中的排名(升序):

?startkey=["fun", "couchdb", 0]&endkey=["fun", "couchdb", 0, {}]

仅获取带有“couchdb”标签的“fun”类别中的排名(降序):

?startkey=["fun", "couchdb", 0, {}]&endkey=["fun", "couchdb", 0]&descending=true

我希望这有帮助。复杂的键开始真正显示出 Map/Reduce 在对数据进行切片和切 block 方面有多么强大。

干杯。

关于sorting - CouchDB 在同一 View 中排序和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3311225/

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