Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 20, 2010 00:39:17

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

couchdb рисование таблички из key-value

Вот захотел нарисовать табличку до сих пор работал с posgresql и как то не думал что возникнут вопросы. В любом view получаются документы целиком или какие то части документов но в виде key-value, а как получить только все ключи или только все значения? Чтоб ключами обозначить названия колонок а значениями собственно содержимое колонок.

Все что пришло в голову это или каждому ключу присваиваться несколько значений или скажем для шапки таблички создавать один документ а для тела таблички остальные ну или что то типа регулярных выражений и тд. но хочется как то элегантней что ли, может сказуется отсутствие опыта работы с видами или может есть какие то механизмы.



Отредактировано (Ноя. 20, 2010 01:43:52)

Офлайн

#2 Ноя. 20, 2010 02:04:30

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

couchdb рисование таблички из 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)
В вашем случае вы возвращаете в качестве ключа весь документ, а в качестве значения ничего. Очень странно.



Офлайн

#3 Ноя. 20, 2010 03:01:21

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

couchdb рисование таблички из key-value

Я имел в виду что скажем есть 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);} '''
Чтоб динамически формировать запросы.



Офлайн

#4 Ноя. 20, 2010 16:35:53

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

couchdb рисование таблички из key-value

Например я хочу показать для заголовка, поля с ключами show_title, show_descr, и др. те где есть show_ это можно как то сделать с помощью одного запроса view?



Отредактировано (Ноя. 20, 2010 16:38:16)

Офлайн

#5 Ноя. 21, 2010 15:53:41

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

couchdb рисование таблички из key-value

Немного некорректный вопрос был насколько я сейчас понял в 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 ?



Отредактировано (Ноя. 21, 2010 15:58:40)

Офлайн

#6 Ноя. 22, 2010 01:10:03

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

couchdb рисование таблички из key-value

:)
мап функцию можно изменять динамически, правда не подскажу как это повлияет на производительность но сделать что-то вроде такого можно:

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']



Офлайн

#7 Ноя. 22, 2010 10:21:22

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

couchdb рисование таблички из key-value

ofigetitelno
мап функцию можно изменять динамически
мап функцию НЕЛЬЗЯ изменять динамически.



Офлайн

#8 Ноя. 22, 2010 12:47:15

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

couchdb рисование таблички из key-value

:)
да что вы говорите…
нельзя - это, в смысле, не рекомендовано или не будет работать?
потому как работает…



Офлайн

#9 Ноя. 22, 2010 14:26:26

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

couchdb рисование таблички из key-value

Работает, пересоздавая индекс. Накладно выходит.



Офлайн

#10 Ноя. 23, 2010 01:04:44

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

couchdb рисование таблички из key-value

Да собственно постоянный а не временный вид и нужен чтоб не пересоздавался, все таки при пересоздании он по всей базе проходиться, если это частый запрос то это создаст определенные тормоза наверно. Поэтому напрашиваеться вариант с получением просто документа а дальше его уже с помощью регулярных выражений обрабатывать.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version