2012-03-30 4 views
1

У меня есть сайт, на котором у меня есть документы размером около 1 МБ. Чтобы избежать каких-либо концептуальных объединений, я поместил все связанные данные в один документ.Получение только нескольких атрибутов документа в couchdb

Теперь мне часто приходится извлекать только один или два атрибута документа. Каждый документ имеет более 10 атрибутов, многие из которых довольно большие. Я не могу писать записи для каждой комбинации атрибутов.

Как мне это сделать? Единственный способ, который я вижу, - создавать представления «на лету», а затем использовать эти представления. ИЛИ есть ли лучший способ?

ответ

2

http://wiki.apache.org/couchdb/Document_Update_Handlers

Хотя это кажется странным, чтобы вызвать функцию обновления, кушетка позволяет возвращать информацию из документа без его обновления. См. Пример xml.

Здесь может быть примером вы можете расширить:

Добавить jsonpath в свой DDoc (https://github.com/s3u/JSONPath)

 
function(doc, req) { 
    var jsonpath = require('jsonpath'); 
    var path = req.query.path; 
    var target = jsonpath(doc, path); 
    var json = JSON.stringify(target); 
    var resp = { 'headers' : { 'Content-Type' : 'application/json' }, 'body' : json }; 
    return [doc, resp]; 
} 
+1

выше остается в силе, но на самом деле я бы рекомендовал использовать функцию вместо шоу. Это почти точно такой же код. Только верный путь. –

+0

И не забывайте о функциях списка: если вы только _querying_ несколько предопределенных атрибутов, но должны _retrieve_ произвольные комбинации атрибутов, функция списка, которая возвращает объект JSON, содержащий только те части документов, которые заданы парагламентами запроса, является тем, что вы хотите. – ebohlman

+0

Я создал немного библиотеки, чтобы сделать это более увлекательным. см. https://github.com/ryanramage/kanso-jsonselect –

Смежные вопросы