2012-01-03 9 views
1

Как получить сообщение с комментариями Количество в одном запросе с CouchDB?Как получить сообщение с комментариями Количество в одном запросе с CouchDB?

Я могу использовать map-reduce для создания автономного представления [{key: post_id, value: comments_count}], но затем мне пришлось дважды ударить DB - один запрос, чтобы получить сообщение, а другой - для получения комментариев_count.

Есть и другой способ (Rails делает это) - подсчитывать комментарии вручную, на сервере приложений и сохранять его в comment_count атрибуте сообщения. Но тогда нам нужно обновлять весь почтовый документ каждый раз, когда новый комментарий добавляется или удаляется. Мне кажется, что CouchDB не настроен таким образом, в отличие от РСУБД, когда мы можем обновить только атрибут comment_count в CouchDB, мы вынуждены обновлять весь почтовый документ.

Возможно, есть другой способ сделать это?

Спасибо.

ответ

0

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

{"total_rows":3,"offset":0,"rows":[ 
    {"id":...,"key":...,value:doc1}, 
    {"id":...,"key":...,value:doc2}, 
    {"id":...,"key":...,value:doc3}] 
} 
+0

Но мне не нужно приносить все комментарии, это неэффективно. Например, я хочу отобразить список сообщений с количеством комментариев. Если на странице будет отображаться 30 сообщений - с таким подходом я также должен получить все комментарии для всех 30 сообщений. –

+0

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

+0

это не хорошо, потому что в таком случае количество комментариев будет невидимым для клиентов без javascript – matejcik