Я новичок в CouchDB и базах данных, ориентированных на документы в целом.
Я экспериментировал с CouchDB и смог познакомиться с созданием документов (с Perl) и использованием функций Map / Reduce в Futon для запроса данных и создания представлений.
Я все еще пытаюсь понять, как определять повторяющиеся значения в документах с помощью Futon Map / Reduce.
Например, если у меня есть следующие документы:
{
"_id": "123",
"name": "carl",
"timestamp": "2012-01-27T17:06:03Z"
}
{
"_id": "124",
"name": "carl",
"timestamp": "2012-01-27T17:07:03Z"
}
И я хотел получить список идентификаторов документов с повторяющимися значениями «name», могу ли я это сделать с помощью Futon Map / Reduce?
Результат, на который надеялись получить, выглядит следующим образом:
{
"name": "carl",
"dupes": [ "123", "124" ]
}
.. или ..
{
"carl": [ "123", "124" ]
}
.., которое будет значением, и связанные идентификаторы документов, которые содержат эти повторяющиеся значения.
Я пробовал несколько разных вещей с Map / Reduce, но, насколько я понимаю, функция Map работает с данными для каждого документа, а функции Reduce позволяют работать только с ключами / значениями. из данного документа.
Я знаю, что могу просто извлечь нужные мне данные с помощью perl, поработать там волшебство и получить желаемый результат, но пока я пытаюсь работать только с CouchDB, чтобы лучше понять его преимущества / ограничения.
Еще один способ, которым я думаю об этом, - использовать один документ, например, таблицу СУБД:
{
"_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 так, как я думал изначально. Однако я не уверен, что это идеально.
Я понимаю, что мой разум все еще застрял в земле РСУБД, поэтому многое из того, что я пытаюсь сделать выше, может оказаться ненужным. Любое понимание этого было бы очень полезно.
Спасибо!
Edit: Исправлен синтаксис JSON в некоторых примерах.