Как написать запрос SELECT COUNT (поле DISTINCT) в CouchDB?
Есть ли хороший способ имитировать поведение SELECT COUNT (поле DISTINCT) в CouchDB?
Представьте, что у нас есть следующий документ, в котором записано время, когда пользователь играл определенную песню:
{
song_id: "happy birthday",
user_id: "boris",
date_played: [2011, 11, 14, 00, 12, 55],
_id: ...
}
Я хотел бы знатьколичество отдельных песен, когда-либо сыгранных нашим пользователем "boris", Если наш пользователь прослушал «Happy Birthday» 20 раз, эта песня все равно должна вносить всего лишь +1 в общее количество песен.
В MySQL я бы просто выполнилSELECT COUNT(DISTINCT song_id) FROM plays WHERE user_id = "boris"
, но я рисую пустой, когда дело доходит до написания этого в CouchDB.
Обход 1: Если бы я изменил свою схему и вместо этого сохранил все пьесы в одном пользовательском документе для «boris», я мог бы тогда написать карту, чтобы выдавать только различные значения. Однако, если бы я захотел создать что-то в масштабе last.fm, я боюсь, что обновления начнут занимать очень много времени, так как размер документа «boris» (количество воспроизведений) продолжал расти. (Там также может быть максимальный размер документа, который я в конечном итоге ударил).
Обход 2: Я мог бы также написать функцию карты для возвратавсе из отчетливых записей, которые мой скрипт на Python мог бы подвести итог сам; но опять же с сотнями тысяч разных песен это тоже станет очень медленным.
Какие еще варианты я пропускаю?