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)
另见