Эффективный способ найти дубликат / новый в mon go db, где есть много запрашиваемой строки - PullRequest
1 голос
/ 20 марта 2020

У меня есть около 1,5 миллиона существующих пользовательских данных в mongodb. Я должен сделать функцию, которая позволит массового импорта пользователя. Теперь мне нужно проверить, присутствуют ли эти массово импортированные пользовательские данные, а именно электронные письма, или нет. Если некоторые из них присутствуют, а некоторые нет, я хотел бы знать, какие присутствуют, а какие нет.

Например, скажем, у меня есть существующие электронные письма пользователей [ A, B, C, D, E, F ], а импортированные пользователи имеют электронные письма [ C, D, X, Y, Z ]. Я хотел бы знать, C, D не может быть импортирован, поскольку они существуют в БД, тогда как X, Y, Z могут быть импортированы.

В настоящее время я могу запросить каждое импортированное письмо в БД, чтобы проверить, существует ли это конкретное письмо или нет, но я боюсь, что импортированные данные могут быть большими, и этот метод не будет очень эффективным.

Есть ли способ оптимизировать?

1 Ответ

0 голосов
/ 20 марта 2020

Одним из способов было бы сначала поместить уникальный индекс в поле электронной почты коллекции. затем вставьте записи в блок try / catch. любой существующий адрес электронной почты / записи вызовет исключение, когда вы перехватываете и делаете все, что хотите, с ошибочными записями.

альтернативно, вы можете обрабатывать две-три сотни записей импорта одновременно и выполнить следующую команду, чтобы увидеть какие электронные письма уже существуют и не должны быть импортированы.

db.collection.find(
    {
        email:
            { $in: ["C", "D", "X", "Y", "Z"] }
    }
)

, а затем используйте команду bulkwrite для вставки записей, которые можно вставлять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...