mongoDB中的子查询问题

问题描述 投票:0回答:1

我想用MongoDB做一个简单的子查询,然而,在阅读了大量文档后,仍然没有得到它:(我使用类似的代码没有成功:https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/

select count(*) from Table1 where Field1 in (SELECT Field2 FROM Table2 where Field3 in ('QWERTY','ASDDF'));

你能帮忙吗?谢谢。

编辑:我尝试了类似下面的内容,但仍然错过了field3的过滤器...

db.getCollection("Table1").aggregate(
    [
        { 
            "$group" : {
                "_id" : {

                }, 
                "COUNT(*)" : {
                    "$sum" : NumberInt(1)
                }
            }
        }, 
        { 
            "$project" : {
                "COUNT(*)" : "$COUNT(*)", 
                "_id" : NumberInt(0)
            }
        },
        {
        "$lookup": {
            "from": "Table2",
            "localField": "Field1",
            "foreignField": "Field2" ,
            "as": "data"
            }
        },
{"$match": { "data.Field3": { "$in" : [ "QWERTY", "ASDDF" ]  } }}  
    ], 
    { 
        "allowDiskUse" : true
    }
);
sql mongodb lookup correlated-subquery
1个回答
0
投票

如果我理解正确,你有两个这样的集合

collection1

[
{
    "c" : 3,
    "field" : 3
},
{
    "b" : 2,
    "field" : 2
},
{
    "a" : 1,
    "field" : 1
}
]

collection2

[
{
    "field1" : 4,
    "field2" : "kghjfdsa"
},
{
    "field1" : 3,
    "field2" : "dsfdgfdghdf"
},
{
    "field1" : 2,
    "field2" : "fdsfsd"
},
{
    "field1" : 1,
    "field2" : "adasd"
}
]

要查询您的数据,您只需运行此查询

db.collection2.aggregate([
    {
        $match: {
            field2: {
                $in: ["kghjfdsa", "fdsfsd", "adasd"]
            }
        }
    },
    {
        $lookup: {
            from: "collection1",
            localField: "field1",
            foreignField: "field",
            as: "data"
        }
    },
    {
        $match: {
           "data.field": 1
        } 
    }
])

如果我可以提供任何帮助,请告诉我:)

© www.soinside.com 2019 - 2024. All rights reserved.