我有2个表:messages
和responded_messages
两者都有一个名为message_id
的密钥。
我想基于message_id从不在响应消息中的消息中获取所有文档。我将如何在PyMongo中做到这一点?
对于python列表示例,
messages = [1,2,3]
responded_messages= [3]
结果应为[1,2]
我查看了聚合框架,并认为这是与之相关的,但是我无法对此进行指点。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
基本上,您要寻找的是在两个LEFT JOIN
为responded_messages
的集合之间执行NULL
。
您可以使用MongoDB聚合管道$lookup运算符来实现。
例如,给定集合messages
如下:
{ "_id": 1, "message_id": 1 }
{ "_id": 2, "message_id": 2 }
{ "_id": 3, "message_id": 3 }
和集合responded_messages
如下:
{ "_id": 1, "message_id": 3 }
使用PyMongo,您可以执行以下操作:
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)