gpt4 book ai didi

json - 识别 CouchDB 中的重复项

转载 作者:行者123 更新时间:2023-12-04 14:49:31 25 4
gpt4 key购买 nike

我是 CouchDB 和面向文档的数据库的新手。

我一直在玩 CouchDB,并且能够熟悉创建文档(使用 perl)和使用 Futon 中的 Map/Reduce 函数来查询数据和创建 View 。

我仍在试图弄清楚的一件事是如何使用 Futon 的 Map/Reduce 识别文档中的重复值。

例如,如果我有以下文件:

{
"_id": "123",
"name": "carl",
"timestamp": "2012-01-27T17:06:03Z"
}

{
"_id": "124",
"name": "carl",
"timestamp": "2012-01-27T17:07:03Z"
}

而且我想获得具有重复“名称”值的文档 ID 列表,这是我可以用 Futon Map/Reduce 做的事情吗?

希望达到的结果如下:
{
"name": "carl",
"dupes": [ "123", "124" ]
}

..或者..
{
"carl": [ "123", "124" ]
}

.. 这将是值,以及包含这些重复值的关联文档 ID。

我已经用 Map/Reduce 尝试了一些不同的东西,但据我所知,Map 函数以每个文档为基础处理数据,而 Reduce 函数只允许您使用给定的键/值文档。

我知道我可以只用 perl 提取我需要的数据,在那里工作,然后得到我想要的结果,但我现在只尝试使用 CouchDB,以便更好地了解它的好处/局限性。

我正在考虑这样做的另一种方法是使用单个文档,如 RDBMS 表:
{
"_id": "names",
"rec1": {
"_id": "123",
"name": "carl",
"timestamp": "2012-01-27T17:06:03Z"
},
"rec2": {
"_id": "124",
"name": "carl",
"timestamp": "2012-01-27T17:07:03Z"
}
}

.. 这应该允许我以我最初认为的方式使用 Map/Reduce 函数。但是,我不确定这是否理想。

我知道我的思绪仍然停留在 RDBMS 领域,所以我上面尝试做的很多事情可能没有必要。对此的任何见解将不胜感激。

谢谢!

编辑:修复了一些示例中的 JSON 语法。

最佳答案

如果您只想要一个唯一值列表,那很容易。如果您想识别重复项,那么就变得不那么容易了。

在这两种情况下,像这样的 map 函数就足够了:

function (doc) {
emit(doc.name);
}

对于您的缩减功能,只需输入 _count .

您的 View 输出将如下所示:(基于您的 2 个文档)
{
"rows": [
{ "key": "carl", "value": 2 }
]
}

从那里,您将获得名称列表及其频率。您可以使用该列表并自行过滤,或者您可以使用“所有沙发”路线并使用 _list function执行最终过滤。
function (head, req) {
var row, duplicates = [];
while (row = getRow()) {
if (row.value > 1) {
duplicates.push(row);
}
}
send(JSON.stringify(duplicates));
}

阅读有关 _list功能,它们非常方便且用途广泛。

关于json - 识别 CouchDB 中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9038401/

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