#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. Спасибо, я заставил его работать, используя функцию списка, чтобы переписать документ в требуемом формате.