我正在尝试为伪SQL语句生成MongoDB版本3.6查询:
SELECT table1.c1, table1.c2
FROM table1
WHERE (table1.c1 IN (SELECT table2.c1 FROM table2 U0 WHERE (U0.c2 IN (1, 2))))
我该怎么做?我正在寻找单一的聚合查询语法。
修改
问题是不是this问题的副本。解释给出了假设查找阶段的输出数组将具有以下形式:
noncr = [{_id: ObjectID('xxxx'), blockedIDs: [ObjectID('yyy'), ObjectID('zzz')]}]
我正在查看的sql查询将具有$lookup
的输出数组,如下所示:
table2 = [{_id: ObjectID('xxxx'), c1: 35},
{_id: ObjectID('yyyy'), c1: 34},
{_id: ObjectID('zzzz'), c1: 37}]
最后,数组需要转换为
table2 = [35, 34, 37]
所以它可以像这样使用:
$match: {$expr: {$in: [$c1, $table2]}}
基本上,我正在寻找一种转换table2
的方法,如上所示。这可能吗?
答案 0 :(得分:0)
我明白了。管道如下:
[{
'$lookup': {
'from': 'table2',
'pipeline': [{
'$match': {
'c2': {
'$in': [1,
2]
}
}
},
{
'$project': {
'col1': True
}
}],
'as': '_nested_in'
}
},
{
'$addFields': {
'_nested_in': {
'$map': {
'input': '$_nested_in',
'as': 'lookup_result',
'in': '$$lookup_result.c1'
}
}
}
},
{
'$match': {
'$expr': {
'$in': ['$col1',
'$_nested_in']
}
}
}
]
刚刚发现了$map
运算符。