Я создаю приложение, которое будет периодически выполнять автономное сопоставление для коллекции MongoDB. Однако мне нужно получить список всех возможных совпадений, которые ранее не были сопоставлены.
Так, например, представьте следующие объекты (упрощенные, чтобы сделать это более читабельным):
person { _id: 1, name: 'Matt', previouslyMatched: [2] }
person { _id: 2, name: 'John', previouslyMatched: [1] }
person { _id: 3, name: 'Tony', previouslyMatched: [] }
Я хочу выполнить запрос к Мэтту (id: 1), чтобы выяснить, есть ли какие-либо другие записи о персонале, которых нет в массиве ранее.
Теперь в SQL я бы так что-то вроде SELECT ID FROM person WHERE ID <> 1 AND ID NOT IN (SELECT match_id from person_match where person_id = 1)
конечно, при условии, что у меня есть таблица поиска person_match со столбцами person_id и match_id, в которой хранятся все предыдущие совпадения. Я понимаю, что в этом запросе есть потенциальные ошибки производительности, но, пожалуйста, потерпите меня, так как это всего лишь пример, и будут сделаны другие оптимизации.
В MongoDB просто не ясно, как бы я поступил так. Я, конечно, мог бы получить документ о человеке (id: 1), затем получить все документы о людях и проверить, находится ли идентификатор в массиве beforeMatched на стороне клиента, но меня беспокоит снижение производительности из-за неоправданно большого размера передача данных клиенту с сервера БД.
Я знаю, что есть функция $ nin , но я читал, что ее производительность невелика, и еще раз, я не уверен, насколько разумно было бы передать эту идею. потенциально очень длинный массив идентификаторов для этого поля по мере масштабирования моего приложения.
Мои интуитивные ощущения говорят мне, что ответ может заключаться в Выполнение кода на стороне сервера , но мне не ясно, как этого достичь.
Наконец, меня также беспокоит, сколько элементов можно хранить практически в одном поле массива. Есть ли практический предел?
Спасибо,
Matt