объединение нескольких документов в представлении couchdb

#couchdb

#couchdb

Вопрос:

В couchdb мне нужно представить некоторые данные в следующем формате: внешний контейнер, который ссылается на другие документы внутри массива.

Я хочу сохранить эти документы отдельно, поскольку мне нужно управлять конфликтами с ними по отдельности.

 {
  "_id" : "1"'
  "type" : "container",
  "items" : [ "1", "2", "3"]
}


{
   "_id" : "2",
   "value": "a"
    "type" : "item"
}


{
   "_id" : "3",
   "value": "b"
   "type" : "item"
 }


 {
   "_id" : "4",
   "value": "c"
    "type" : "item"
 }    
  

Я хочу вывести представление данных в следующем формате.

 {
  "_id" : "1"'
  "type" : "container",
  "items" : [
     {
       "_id" : "2",
       "value": "a"
       "type" : "item"
     },
     {
       "_id" : "3",
       "value": "b"
       "type" : "item"
     },
     {
       "_id" : "4",
       "value": "c"
       "type" : "item"
     }
   ]

}
  

Каков наилучший способ подойти к этому?

Ответ №1:

Этого можно добиться с помощью связанных документов couchdb

вот как будет выглядеть представление

   function(doc){
    if(doc.items)
    doc.items.forEach(function(item){
          emit(doc._id,{_id:item});
      })
 }
  

теперь вы можете запросить представление с include_docs=true параметром, и вы должны получить желаемый результат.

Комментарии:

1. Вернет ли это один документ, как указано выше?

2. @AlanQuigley почти. Приведенное выше представление вернет все документы в массиве items. Однако вам придется извлечь результаты из ответа couchdb.

3. Спасибо, я заставил его работать, используя функцию списка, чтобы переписать документ в требуемом формате.