Проблема с подзапросом в mongoDB - PullRequest
0 голосов
/ 25 февраля 2019

Я хотел сделать простой подзапрос с 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'));

Не могли бы вы помочь с этим? Спасибо.

Отредактировано: Я пробовал что-то подобное ниже, но все еще отсутствует фильтр поля 3 в ...

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
    }
);

1 Ответ

0 голосов
/ 26 февраля 2019

Если я правильно понимаю, у вас есть две коллекции, подобные этой

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
        } 
    }
])

Если я могу чем-нибудь помочь, дайте мне знать:)

...