我最近开始使用MongoDB,在翻译查询时,我在尝试翻译MySQL NOT IN查询时偶然发现了一个问题。
我想做的是找到另一个集合中不存在的ID。我需要一种方法来返回其中有多少个ID,然后返回这些ID的列表。
在MySQL中,这些ID位于名为songs
的表中,并命名为spotify_id
。我正在检查名为artists
的表,其中ID被称为track_id
。
MySQL查询:
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查询似乎返回正数的文档,即使两个集合中都应包含所有ID。 MySQL查询可在同一数据库上完美运行。
是否有更好的方法在MongoDB中执行NOT IN查询?
谢谢!