Форум сайта python.su
Если я правильно понял то нужно что-то типа этого
function (doc) {
if (doc.type=='book')
emit(doc._id, {doc.show_title, doc.show_genre, doc.show_price});
}
q = db.view.view_name(key=BOOK_ID).rows
if not q:
raise NotFound()
book = q[0].value
Отредактировано (Ноя. 23, 2010 15:16:09)
Офлайн
:)
что-то я не могу понять, зачем создавать map функцию, если вам нужно получить документ по id…
Офлайн
ofigetitelnoтолько если нужно получить не весь документ - а его часть
:)
что-то я не могу понять, зачем создавать map функцию, если вам нужно получить документ по id…
Офлайн
Я хотел создать мап функцию чтоб получить каким то образом все поля которые начинаются на show_ например в документе с {_id:“1”}, но как я понимаю написать подобный мап трудновыполнимо. Потому согласен что проще обойтись без мапа а по id получить документ и регулярными выражениями получить из него что нужно. Просто это уже небольшая обертка а хотелось бы чтоб функционал базы позволял это. А вообще это только мое виденье рисования таблички что один документ рисует шапку а во всех остальных просто есть {“type”:“1”} и они уже видом подгоняются под шапку. Может можно по другому изобразить это дело:).
Офлайн
alexandreНу почему трудновыполнимо - там стандртный JavaScript. Соответственно, Вы можете сделать что-то типа такого
Я хотел создать мап функцию чтоб получить каким то образом все поля которые начинаются на show_ например в документе с {_id:“1”}, но как я понимаю написать подобный мап трудновыполнимо.
function (doc) {
if (doc.type=='book') {
var keys = [];
for (var i in doc) {
if ( /^show_(\w)+$/.test(i)) keys.push(doc[i]);
}
emit(keys, doc._id);
}
}
Отредактировано (Ноя. 24, 2010 09:54:57)
Офлайн
Офлайн
ziro спасибо, впринцепе как то не подумал в мапе сразу регулярным выражением сделать это действительно довольно елегантно, приведу вариант которым я уже воспользовался если кому интересно, он более громоздкий единственный плюс какие то параметры можно передавать в функцию.
def get_rex_doc(database, doc_id, pattern):
doc = database[doc_id]
result = {}
pattern = pattern+ur"[0-9a-zA-Z_]+"
for key in doc:
m = re.search(pattern, key)
# проверяет что в m чтото есть проверяем что он не нулллл
if m:
if m.group() == key:
getk = m.group()
result[getk] = doc[getk]
return result
def get_docs_on_type(db, view, pattern):
docs = db.view(view)
result = {}
for doc in docs:
result [doc['id']] = get_rex_doc(db, doc['id'], pattern)
return result
from couch_lib import get_rex_doc, get_docs_on_type
couch = Server('http://127.0.0.1:5984')
db = couch['test']
a = get_rex_doc(db, "1", "show_")
for k in a:
print a.get(k)
a = get_docs_on_type(db, "_design/rb_docs/_view/show", "show_")
for k in a:
for kk in a[k]:
print a[k][kk],
Отредактировано (Ноя. 26, 2010 01:36:47)
Офлайн