使用mongodb中的选定字段和where子句连接两个表
我有以下两个收藏:-使用mongodb中的选定字段和where子句连接两个表,mongodb,mongodb-query,aggregation-framework,lookup,Mongodb,Mongodb Query,Aggregation Framework,Lookup,我有以下两个收藏:- 表1 {"_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("12
表1
{"_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"}
表2
{"_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"}
}
])
请帮助我获得上述预期结果您可以使用mongodb3.6尝试下面的聚合
db.table1.aggregate([
{ "$match": { "item_id": "1.1" }},
{ "$lookup": {
"from": "table2",
"let": { "item_id": "$item_id", "m_date": "$m_date" },
"pipeline": [
{ "$match": {
"$expr": { "$eq": ["$$item_id", "$item_id" ] },
"$expr": { "$eq": ["$$m_date", "$m_date"] }
}}
],
"as": "table2_values"
}},
{ "$addFields": { "ref_id": { "$arrayElemAt": ["$table2_values.ref_id", 0] }}},
{ "$project": { "_id": 0, "item_id": 1, "ref_id": 1 }}
])
我看不到表2。两个表是否相同?表1中的前3个文档和表2中的其余3个文档。少数字段值相同,但并非全部相同。这里的ref_id不相同您使用的mongo版本是什么?@AnthonyWinzlet its 3.4.7,升级版本没有问题我想从两个表中ftetch字段数据,请查看预期输出我已经检查了输出,您可以添加投影以显示几个特定字段吗我可以使用此
{“$project”:{“\u id”:0,“item\u id”:“$item\u id”,“ref\u id”:“$ref\u id”}
。请您为上述查询添加位解释。我已更新了我的答案,对于解释,您可以通过此@SRK,如果对您有效,请接受答案。否则,如果有任何问题,请告诉我。