Я недавно начал использовать MongoDB, и при переводе запросов я столкнулся с проблемой при попытке перевести запрос MySQL NOT IN.
Я пытаюсь найти идентификаторы, которыенет в другой коллекции.Мне нужен способ вернуть количество этих идентификаторов, а затем список этих идентификаторов.
В MySQL эти идентификаторы находятся в таблице с именем songs
и называются spotify_id
.Я проверяю таблицу с именем artists
, где идентификаторы называются track_id
.
MySQL Query:
SELECT spotify_id FROM songs WHERE spotify_id NOT IN (SELECT artists.track_id FROM artists)
Мой текущий код с использованием MongoDB:
track_ids = artists.find({}, {'track_id': 1})
track_ids_list = [d.get('track_id') for d in track_ids]
# Getting amount of ids not present in artists
tracks_num = songs.count_documents({'spotify_id': {'$nin': track_ids_list}})
# Getting tracks not present in artists
tracks = songs.find({'spotify_id': {'$nin': track_ids_list}})
Запрос MongoDB, похоже, возвращает положительное количество документов, даже если все идентификаторы должны присутствовать в обеих коллекциях.Запрос MySQL отлично работает в той же базе данных.
Есть ли лучший способ выполнить запрос NOT IN в MongoDB?
Спасибо!