将MySQL NOT IN转换为MongoDB

时间:2019-06-05 13:31:25

标签: mongodb pymongo

我最近开始使用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查询?

谢谢!

0 个答案:

没有答案