Как написать запрос 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 мог бы подвести итог сам; но опять же с сотнями тысяч разных песен это тоже станет очень медленным.

Какие еще варианты я пропускаю?

Ответы на вопрос(4)

Ваш ответ на вопрос