Представления CouchDB: Объединения и подзапросы

Я отправил это в список рассылки CouchDB-Users, но подумал, что раскрою свою сеть немного шире.

[ссылки уничтожены из-за новых правил спама для пользователей stackoverflow :-(]

Надеюсь, один из вас, умных людей, сможет помочь (или, по крайней мере, кто-то может окончательно сказать мне, что я пытаюсь сделать это невозможно, и я нужно искать альтернативы ... Я слышал, что MySQL набирает обороты (-:).

Справочная информация: Я создал пример базы данных здесь: scoates-test.couchone.com/_utils/database.html?follow / scoates-test.couchone.com/follow

У меня есть два типа документов. type = user и type = asset.

Пример пользователя: scoates-test.couchone.com/_utils/document.html?follow/c988a29740241c7d20fc7974be05f67d[12264 sizes Пример ресурса: scoates-test.couchone.com/_utils/document. ? follow / c988a29740241c7d20fc7974be061d62

Пользователи могут подписываться на других пользователей (поле type = пользовательский документ "следующий"). Приведенный выше пример user (username = bob) "следующий" за 2 пользователями:

"following": [
   "c988a29740241c7d20fc7974be05ec54", // username=aaron
   "c988a29740241c7d20fc7974be060bb4" // username=dale
]

Активы принадлежат определенному пользователю. Приведенный выше актив принадлежит c988a29740241c7d20fc7974be061d62 (username = bob).

Надеюсь, это имеет смысл.

Я хотел бы запросить активы, принадлежащие пользователям, на которых Боб подписан (аарон и Дейл), Я не могу указать на код представления, который позволит это. Я могу легко выпустить все активы, которые принадлежат c988a29740241c7d20fc7974be05f67d.

Я мог сделать это в двух запросах. Сначала я бы попросил CouchDB c988a29740241c7d20fc7974be05f67d, а затем POST следующее как «ключи» к представлению, которое возвращает активы, принадлежащие этим ключам, но вы заметите, что в моих документах type = asset также есть поле "когда", и я хочу иметь возможность чтобы упорядочить это, отправив [doc.owner, doc.when] в качестве ключа, а затем используя startKey / endKey. Так что, я думаю, POST ключей отсутствует.

Я мог бы просто подключиться на стороне приложения (запросить следующие ключи, сделать один запрос для каждый из этих ключей, а затем сортировать на стороне приложения), но это очень сильно нарушает разбиение на страницы (я бы необходимо запрашивать ограничение размера страницы для каждого следующего), и это выходит из-под контроля очень быстро (если пользователь подписан на 1000 пользователей, это 10 000 записей на страницу).

Ни одно из этих решений у меня не работает. Я бы хотел сделать это в CouchDB.

Я действительно в тупике. Пожалуйста, помогите.

S

8
задан Chris Snow 3 November 2014 в 14:33
поделиться