2015-01-11 4 views
2

У меня есть набор документов в Couchbase, где каждый может иметь некоторых пользователей в качестве редакторов - набор элементов UserID`s в массиве.Querying «Not In» в Couchbase

Id хотел бы запросить все документы, где пользователь с определенным идентификатором пользователя (имя пользователя) не в списке редакторов?

вот что выглядит мои данные, как:

document1: {editors[1,2,3,4]} 
document2: {editors[1,2,3,4,5]} 

user{id:5} 

Что касается данных выше - как можно запрашивать все документы типа документа, в котором пользователь с идентификатором = 5 не перечислены в редакцию массива - смысл только Document1 должен вернуть?

ответ

0

Хорошо, у меня есть одно решение, соответствующее моим требованиям. Я добавил на страницу функциональность пейджинга, которая помогла не тратить слишком много ресурсов.

В основном я возвращаю 100 (зависит от размера страницы) документов за цикл типа «документ». На каждом цикле я просматриваю список строк и выбираю только тех, кто вошел в систему, не назначен. В случае, если у меня есть 100 строк для страницы, я возвращаюсь тогда, в противном случае я перехожу на другой цикл (размер страницы) и пытаюсь добавить отсутствующие строки, которые будут возвращены для представления.

Это довольно уродливое, но я не могу найти легкое и легкое решение без вопросов.

Еще одна вещь была обнаружена - LINQ to Couchbase от Telerik

2

Я не могу придумать способ сделать это с помощью представлений Couchbase, потому что, поскольку я понимаю ваше описание, это взаимосвязь между многими пользователями и пользователями, и вам нужно сделать «не в "запрос. Вы можете легко сделать это с помощью N1QL, нового языка запросов для Couchbase. В настоящее время это предварительный просмотр разработчика - независимо от того, является ли это полезным решением для вас, зависит от того, как скоро вам понадобится этот код для выхода в производство. Если вам это нужно прямо сейчас минута, то это, вероятно, не лучшее решение. Другой альтернативой является использование функции ElasticSearch integration Couchbase и выполнение запроса в ElasticSearch, а затем извлечение соответствующих документов из Couchbase. Это также решает задачу, имея в виду возможность быть доступным для производства прямо сейчас.

0

Еще одна альтернатива заключается в том, чтобы сделать это на стороне клиента. вы можете получить все документы и их редакторы в представлении и перебрать по списку и выбросить любой документ, где user_id 5 присутствует в списке редактора через цикл. Если вы не ожидаете, что многие строки будут претендовать на предложение «не в», вы не будете тратить слишком много циклов, делая это. Это было бы тривиально с N1QL. вы можете настроить его быстро и попробовать. предварительный просмотр разработчика уже доступен, и в настоящее время мы работаем над его выпуском в следующей крупной версии продукта. спасибо -cihan

 Смежные вопросы

  • Нет связанных вопросов^_^