170 похожих чатов

Привет Вопрос по mongodb Храню в коллекции список элементов Хочу сравнить список элементов

в оперативной памяти со списком в БД
(и найти те, которые есть в памяти и нет в БД)

Как это правильнее сделать?
Просто выгрузить все элементы из БД? И выполнить сравнение на стороне Питона?
Или можно как-то выполнить сравнение списков на стороне Монги?

Элементов - несколько тысяч, до 10к

9 ответов

8 просмотров

.find(field_name: {'$in': [1, 2, 3]})

Ilya- Автор вопроса
denis
.find(field_name: {'$in': [1, 2, 3]})

если я в $in передам список из 5к элементов, это ок будет?

Ilya
если я в $in передам список из 5к элементов, это о...

если не ок, что мешает сделать по кускам?

Ilya- Автор вопроса

ну попробуй, скорее всего 10к это нормально вообще почти всегда стоит делать по максимуму на стороне бд

Ilya- Автор вопроса
denis
ну попробуй, скорее всего 10к это нормально вообще...

есть список А в оперативной памяти (переменной) и список B в БД как найти элементы, которые есть в A, но нет B? найти пересечение A и B (запросом к БД) и потом вычесть это пересечение из A? (уже Питоном) все равно придется на стороне Питона часть расчетов проводить?

Тебе в любом случае надо будет вычитать все документы в базе. А вот заставлять монгу каждый документ сравнивать со списком на 10к элементов - это херовая идея. Проще одним запросом вычитывать документы из базы (используй projection, что бы не доставать все поля, а только нужные). Вычитывать как итерататор, не надо превращать результат в список. Исходный список в памяти превращаешь в set. В теле цикла удаляешь из set-a элемент полученный из базы. По завершению цикла в set-е останутся те элементы, которых нет в базе. Примерно так: source = set(source_list) for doc in collection.find({...}, projection={'value': 1}): source.remove(doc['value'])

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта