Найти - Пользователи
Полная версия: couchdb рисование таблички из key-value
Начало » Базы данных » couchdb рисование таблички из key-value
1 2
alexandre
Вот захотел нарисовать табличку до сих пор работал с posgresql и как то не думал что возникнут вопросы. В любом view получаются документы целиком или какие то части документов но в виде key-value, а как получить только все ключи или только все значения? Чтоб ключами обозначить названия колонок а значениями собственно содержимое колонок.

Все что пришло в голову это или каждому ключу присваиваться несколько значений или скажем для шапки таблички создавать один документ а для тела таблички остальные ну или что то типа регулярных выражений и тд. но хочется как то элегантней что ли, может сказуется отсутствие опыта работы с видами или может есть какие то механизмы.
Александр Кошелев
alexandre
В любом view получаются документы целиком или какие то части документов но в виде key-value,
Всё зависит от того как вы этот view напишите.
alexandre
а как получить только ключи или только значения
Зависит от того “ключ” и “значение” чего вы хотите получить.
alexandre
<thead><tr> {% for doc_list in data %}<td> {{doc_list.key}}<td> {% endfor %}</tr></thead> <tbody><tr> {% for doc_list in data %}<td> {{doc_list.value}}<td><br/> {% endfor %}</tr></thead>
Запрос возвращает генератор и у вас не получится так просто пройтись по нему несколько раз
alexandre
res = db.query(map_fun)
В вашем случае вы возвращаете в качестве ключа весь документ, а в качестве значения ничего. Очень странно.
alexandre
Я имел в виду что скажем есть 10 документов с одинаковыми ключами и разными значениями и получить ключи любого документа, чтоб вывести в шапке таблички, а в теле только значения всех документов как то так.

И еще вопрос можно ли как то сюда
 map_fun = ''' function(doc) { if(doc.title) emit(doc.title, null);} '''
Заместо скажем doc.title вставить просто какую то переменную которая получает динамически значение.
Например:
name = doc.title
map_fun = ''' function(doc) { if(name) emit(doc.title, null);} '''
Чтоб динамически формировать запросы.
alexandre
Например я хочу показать для заголовка, поля с ключами show_title, show_descr, и др. те где есть show_ это можно как то сделать с помощью одного запроса view?
alexandre
Немного некорректный вопрос был насколько я сейчас понял в map не подключиш динамически ничего, он нужен только для создания определеного индекса. Попробую переформулировать вопрос:
Есть список документов типа
{
"_id": "1",
"_rev": "4-f21208abd11a9e2c18629325789e0578",
"show_title": "земля Санникова",
"ISBN": ["567-5-237-01677-4" ],
"show_genre": "фантастика",
"show_price": 100,
"author": "первый",
"type": "book"
}
Мне нужно выбрать только один документ по _id:
rpt_view = ViewDefinition('rb', 'show', '''function(doc) {if(doc._id=="1") emit(doc, doc); }''')
rpt_view.sync(db)
Это работает, теперь нужно отсюда получить нужные поля ( “show_title”: “земля Санникова”,
“show_genre”: “фантастика”, “show_price”: 100):

for res in db.view("_design/rb/_view/show", keys=["show_title", "show_genre", "show_price"]):
print res.key
print res.value
Тут ничего не происходит может как то подругому нужно сформировать key ?
ofigetitelno
:)
мап функцию можно изменять динамически, правда не подскажу как это повлияет на производительность но сделать что-то вроде такого можно:
map_func = '''
function (doc) {
if (doc._id == '%s')
emit(doc._id, null)
}'''
for row in db.query(map_func % '1'):
print row
а с получением записи по ключу вообще всё просто должно быть:
doc = db['1']
print doc['show_title']
dimabest
ofigetitelno
мап функцию можно изменять динамически
мап функцию НЕЛЬЗЯ изменять динамически.
ofigetitelno
:)
да что вы говорите…
нельзя - это, в смысле, не рекомендовано или не будет работать?
потому как работает…
Андрей Светлов
Работает, пересоздавая индекс. Накладно выходит.
alexandre
Да собственно постоянный а не временный вид и нужен чтоб не пересоздавался, все таки при пересоздании он по всей базе проходиться, если это частый запрос то это создаст определенные тормоза наверно. Поэтому напрашиваеться вариант с получением просто документа а дальше его уже с помощью регулярных выражений обрабатывать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB