【发布时间】:2020-09-11 19:34:11
【问题描述】:
我有两个集合:document 和 citation。它们的结构如下图所示:
# document
{id:001, title:'foo'}
{id:002, title:'bar'}
{id:003, title:'abc'}
# citation
{from_id:001, to_id:002}
{from_id:001, to_id:003}
我要查询每篇文献的被引文献(称为参考文献,用to_id表示)的信息。在 SQL 中,我会使用document 表左连接citation,然后左连接document 来获取引用的完整信息(不仅仅是它们的ID)。
但是,我只能在 MongoDB 中使用$lookup 实现第一步。这是我的聚合管道:
[
{'$lookup':{
'from': 'citation',
'localField': 'id',
'foreignField': 'from_id',
'as': 'references'
}}
]
我可以通过这个管道获得以下结果:
{
id:001,
title:'foo',
references:[{from_id:001, to_id:002}, {from_id:001, to_id:003}]
}
想要的结果是:
{
id:001,
title:'foo',
references:[{id:002, title:'bar'}, {id:003, title:'abc'}]
}
我找到了这个answer,但它似乎是一对一的关系,不适用于我的情况。
编辑:有人说在 MongoDB 中应该避免加入,因为它不是关系数据库。我选择 MongoDB 是因为它比我的 MySQL 快得多。
【问题讨论】:
标签: python database mongodb pymongo