Выполнение разницы набора в MongoDB - PullRequest
4 голосов
/ 12 декабря 2011

У меня есть две разные коллекции с общим полем, скажем, UserId. Существуют также другие атрибуты, которые определяют идентификаторы пользователей.

Например:

Collection 1: {UserId, SellsToUserId}

Collection 2: {UserId, BuysFromUserId}

Я хочу запустить операцию, которая даст мне разницу между двумя наборами.

Пример запроса: Получить все идентификаторы пользователей, которым данный идентификатор пользователя продает, но не покупает у них.

Решение в псевдокоде

var sellToCursor = collection1.Find(Query.EQ("UserId", Me)).SetFields({SellsToUserId});

var buyFromCursor = collection2.Find(Query.EQ("UserId", Me)).SetFields({BuysFromUserId});

SellToButDontBuyFrom[] = sellTo - buyFrom;   //definitely pseudocode here.

Я хочу сделать это на сервере MongoDB, потому что у меня большие наборы данных.

Любые предложения, чтобы сделать это эффективным способом?

1 Ответ

3 голосов
/ 12 декабря 2011

Вы можете выполнить ту же логику, используя javascript и выполнив ее на сервере, но она не будет быстрее. Если ваш клиент C # обладает высокой пропускной способностью к серверу, это будет гораздо лучшим выбором. Чтобы оптимизировать его, вы можете отсортировать оба запроса по SellsToUserId и BuysFromUserId соответственно и выполнить итерацию по двум курсорам, аналогичным алгоритму сортировки слиянием, где вы можете остановиться, когда sellToCursor достигнет конца.

...