Jestem nowym użytkownikiem CouchDB i ogólnie zorientowanych na dokumenty baz danych.Identyfikacja duplikatów w CouchDB
Bawiłem się z CouchDB i byłem w stanie zapoznać się z tworzeniem dokumentów (z perl) i używając funkcji Map/Reduce w Futon do wysyłania zapytań o dane i tworzenia widoków.
Jedną z rzeczy, które wciąż próbuję wymyślić jest, jak zidentyfikować zduplikowane wartości w dokumentach za pomocą mapy Futona/Zmniejsz.
Na przykład, jeśli mam następujące dokumenty:
{
"_id": "123",
"name": "carl",
"timestamp": "2012-01-27T17:06:03Z"
}
{
"_id": "124",
"name": "carl",
"timestamp": "2012-01-27T17:07:03Z"
}
I chciałem uzyskać listę identyfikatora dokumentu, który miał duplikat wartości „nazwa”, jest to coś, co mógłbym zrobić z Futon Mapa/Zmniejszyć?
Wynik był nadzieją, aby osiągnąć to, co następuje:
{
"name": "carl",
"dupes": [ "123", "124" ]
}
..or ..
{
"carl": [ "123", "124" ]
}
.. co byłoby wartość, a skojarzone identyfikatory dokumentów, które zawierają te zduplikowane wartości .
Próbowałem kilku różnych rzeczy z mapą/zmniejszeniem, ale o ile rozumiem, funkcja mapy działa z danymi na podstawie dokumentu, a funkcja zmniejszania pozwala tylko na pracę z kluczami/wartości z danego dokumentu.
Wiem, że mogłem po prostu wyciągnąć potrzebne dane za pomocą perla, pracować magicznie i uzyskać pożądany wynik, ale staram się pracować teraz tylko z CouchDB, aby lepiej zrozumieć jego zalety/ograniczenia.
Innym sposobem, myślę o zrobieniu tego jest użycie pojedynczego dokumentu jak stół 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"
}
}
.. co powinno pozwolić mi korzystać z Map/Reduce funkcje w sposób, jaki pierwotnie sądzono . Jednak nie jestem pewien, czy to jest idealne.
Rozumiem, że mój umysł wciąż tkwi w ziemi RDBMS, więc wiele z tego, co próbuję zrobić powyżej, może nie być konieczne. Wszelkie spostrzeżenia na ten temat byłyby mile widziane.
Dzięki!
Edycja: Naprawiono składnię JSON w niektórych przykładach.
... i dla uzyskania duplikatów:? Skip = 1 & reduce = false & key = "car1" –