【发布时间】:2018-11-04 15:00:52
【问题描述】:
我有两个收藏如下:-
table1
{"_id" : ObjectId("5b9a.."), "item_id" :"1.1", "m_date" : "20130401","ref_id":"12R","sub_item_id":"1.1.1"}
{"_id" : ObjectId("5c37.."), "item_id" :"1.1", "m_date" : "20140401","ref_id":"12R","sub_item_id":"1.1.2"}
{"_id" : ObjectId("123cb.."), "item_id" :"1.2", "m_date" : "20140401","ref_id":"12R","sub_item_id":"1.1.3"}
table2
{"_id" : ObjectId("7cb3.."), "item_id" :"1.1", "m_date" : "20130401","ref_id":"12R","sub_item_id":"1.1.1"}
{"_id" : ObjectId("8f34.."), "item_id" :"1.1", "m_date" : "20140401","ref_id":"13R","sub_item_id":"1.1.2"}
{"_id" : ObjectId("5ec8b.."), "item_id" :"1.2", "m_date" : "20150401","ref_id":"14R","sub_item_id":"1.1.3"}
我想显示来自table1 :item_id, m_date, sub_item_id 和table2 : ref_id 的字段,其中 item_id:1.1 这必须在两个表中。所以预期的结果应该是这样的:-
{"item_id" :"1.1", "m_date" : "20130401","sub_item_id":"1.1.1","ref_id":"12R"}
{"item_id" :"1.1", "m_date" : "20140401","sub_item_id":"1.1.2","ref_id":"13R"}
我尝试使用$lookup 编写以下查询,但找到了 0 个文档
db.table1.aggregate([
{$project:{
item_id:1,
m_date: 1,
sub_item_id : 1,
ref_id :1
}},
{
$lookup: {
from: 'table2',
localField: 'item_id',
foreignField: 'item_id',
as: 'table2_values'
},
},
{$unwind:'$table2_values'},
{ $group: {
_id: {ref_id: "$table2_values.ref_id", m_date: "$m_date"
,sub_item_id:'$sub_item_id' },
}},
{$project:{_id:0,m_date:'$_id.m_date',ref_id:'$_id.ref_id'
,sub_item_id:'$_id.sub_item_id',item_id:1}},
{
$match: {"table2_values.item_id": "1.1"}
}
])
请帮助我得到上述预期结果
【问题讨论】:
-
我看不到 table2。两张表是否相同?
-
table1 的前 3 个文档,其余 3 个文档来自 table2。很少有字段值是相同的,但不是全部。这里 ref_id 不一样
-
你用的是什么mongo版本?
-
@AnthonyWinzlet 3.4.7,升级没问题
标签: mongodb mongodb-query aggregation-framework lookup