Я новичок в CouchDB и документ-ориентированных базах данных в целом.
Я играл с CouchDB и смог ознакомиться с созданием документов (с помощью perl) и использованием функций Map / Reduce в Futon для запроса данных и создания представлений.
Одна из вещей, которые я до сих пор пытаюсь выяснить, - это как идентифицировать дублирующиеся значения в документах с помощью Futon's 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, чтобы лучше понять его преимущества / ограничения.
Другой способ, которым я думаю об этом, - использовать один документ, такой как таблица 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 так, как я первоначально думал. Однако я не уверен, что это идеально.
Я понимаю, что мой разум все еще застрял в земле СУРБД, поэтому многое из того, что я пытаюсь сделать выше, может не понадобиться. Любое понимание этого будет высоко ценится.
Спасибо!
Редактировать: Исправлен синтаксис JSON в некоторых примерах.