Создайте представление для получения нескольких документов в CouchDb
CouchDb новичок здесь.
У меня есть несколько документов в CouchDb с одинаковой структурой:
{
"_id": "1170140286",
"_rev": "1-79ffad4d4cbe24effc72f9ec519373ca",
"data": [
{
"photo": "link_of_photo1",
"userid": "34623",
"username": "guest-user1"
},
{
"photo": "link_of_photo2",
"userid": "34623",
"username": "guest-user1"
},
{
"photo": "link_of_photo3",
"userid": "34623",
"username": "guest-user1"
}
]
}
а также
{
"_id": "43573458",
"_rev": "1-0ca5aa68590fcb58399fe059aa8fb881",
"data": [
{
"photo": "link_of_photo1",
"userid": "6334",
"username": "guest-user2"
},
{
"photo": "link_of_photo2",
"userid": "6334",
"username": "guest-user2"
},
{
"photo": "link_of_photo3",
"userid": "6334",
"username": "guest-user2"
}
]
}
Я не знаю, возможно ли то, что я хочу сделать, но я пытаюсь создать представление, которое объединит элементы данных этих документов в один документ:
[
{
"photo": "link_of_photo1",
"userid": "34623",
"username": "guest-user1"
},
{
"photo": "link_of_photo2",
"userid": "34623",
"username": "guest-user1"
},
{
"photo": "link_of_photo3",
"userid": "34623",
"username": "guest-user1"
},
{
"photo": "link_of_photo1",
"userid": "6334",
"username": "guest-user2"
},
{
"photo": "link_of_photo2",
"userid": "6334",
"username": "guest-user2"
},
{
"photo": "link_of_photo3",
"userid": "6334",
"username": "guest-user2"
}
]
Я почти уверен, что не правильно понял логику couchdb, поэтому любая помощь очень важна.
2 ответа
То, что вы можете получить, это результат просмотра со всеми включенными ссылками. Это будет массив, но он будет немного отличаться от вашей смоделированной структуры результатов. Логика представления может выглядеть следующим образом (ключ строк не используется в примере - возможно, имя пользователя или идентификатор является полезным значением для вставки):
function (doc) {
var data = doc.data
if (!data) return
for (var i = 0, link; link = data[i++];)
emit(null, link)
}
Для полноты картины следует упомянуть, что существует способ "объединить все документы" на стороне сервера. Результат просмотра может быть обработан списком CouchDB до того, как данные наконец будут отправлены обратно запрашивающей стороне. But.it.is.not.recommended! Пожалуйста, отнеситесь к этому серьезно и не пытайтесь это сделать - это серьезная проблема с производительностью, которая никогда не была целью CouchDB для предоставления таких вариантов использования.
Please refer these links.
http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views
/questions/9254900/obedinit-neskolko-dokumentov-v-predstavlenii-couchdb
Образец кода:
function(doc){
if(doc.items)
doc.items.forEach(function(item){
emit(doc._id,{_id:item});
})
}
Я надеюсь, что это решит вашу проблему.