Python PyMongo查询其他集合中不存在的文档

Python PyMongo查询其他集合中不存在的文档,python,mongodb,aggregation-framework,pymongo,Python,Mongodb,Aggregation Framework,Pymongo,我有两个表:messages和responsed\u messages 两者都有一个名为message\u id的键 我想根据邮件id从未在回复邮件中的邮件中获取所有文档。在PyMongo中如何获取 对于python列表示例 messages = [1,2,3] responded_messages= [3] 结果应该是[1,2] 我查看了聚合框架,觉得这与此有关,但无法指出原因 任何帮助都将不胜感激。谢谢 本质上,您要寻找的是在两个集合之间执行左连接,其中响应的\u消息为NULL 您可以通过

我有两个表:
messages
responsed\u messages

两者都有一个名为
message\u id
的键

我想根据邮件id从未在回复邮件中的邮件中获取所有文档。在PyMongo中如何获取

对于python列表示例

messages = [1,2,3]
responded_messages= [3]
结果应该是
[1,2]

我查看了聚合框架,觉得这与此有关,但无法指出原因


任何帮助都将不胜感激。谢谢

本质上,您要寻找的是在两个集合之间执行
左连接
,其中
响应的\u消息
NULL

您可以通过使用MongoDB聚合管道操作符来实现这一点

例如,给定集合
消息
,如下所示:

{ "_id": 1, "message_id": 1 }
{ "_id": 2, "message_id": 2 }
{ "_id": 3, "message_id": 3 }
{ "_id": 1, "message_id": 3 }
和收集
响应的\u消息
,如下所示:

{ "_id": 1, "message_id": 1 }
{ "_id": 2, "message_id": 2 }
{ "_id": 3, "message_id": 3 }
{ "_id": 1, "message_id": 3 }
使用,您可以执行以下操作:

collection = client["dbName"]["messages"]

pipeline = [{'$lookup': 
                {'from' : 'responded_messages',
                 'localField' : 'message_id',
                 'foreignField' : 'message_id',
                 'as' : 'responses'}
             },
             {'$match': {'responses' : {"$size": 0} } },
            ]

for doc in (collection.aggregate(pipeline)):
    print(doc)
另见