一般来说,我是 CouchDB 和面向文档的数据库的新手。
我一直在玩 CouchDB,并且能够熟悉创建文档(使用 perl)和使用 Futon 中的 Map/Reduce 函数来查询数据和创建视图。
我仍在试图弄清楚的一件事是如何使用 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 语法。