агрегация $ unwind, $ lookup не работает в mongodb - PullRequest
0 голосов
/ 01 марта 2020

это запрос, который я структурировал в пн go оболочка

db.vendormasters.aggregate([
    { 

        '$match': {
            status: 'active',
        }
    },
    { '$unwind': '$mappedToDealers'},
    {
        $lookup: {
            from: "orders",
            let: {
                vendorId: "$_id",dealerId:'$mappedToDealers'
            },
            pipeline: [
                {
                    $match: {
                        $and: [
                            {
                                $eq: [
                                    "$vendorId",
                                    "$$vendorId"
                                ]
                            },
                            {
                                $eq: [
                                    "$dealerId",
                                    "$$dealerId"
                                ]
                            }
                        ]
                    }
                }
            ], as: "orders"
        }
    },
    { '$unwind': '$orders' },
    }]).pretty()

** сообщение об ошибке, которое я получаю в оболочке: **

E  QUERY    [js] Error: command failed: {
        "ok" : 0,
        "errmsg" : "unknown top level operator: $eq",
        "code" : 2,
        "codeName" : "BadValue"
} : aggregate failed :

    my collection structure is 
       //////collection 1 : vendorMasters///////////
          {
           "_id" : ObjectId("5e5642e32500b8273cbde3ac"),
           "mappedToDealers" : [
                ObjectId("5e1d82156a67173cb877f67d"),
                ObjectId("5e5906dfc749dc4498033f7f")
             ],
        "phoneNo" : 6#7159###,
        "name" : "addedVendor8",
        "address" : "Address6",
        }
   //////collection 2: orders///////////
    {
        "_id" : ObjectId("5e3a710af2657521e8c5668a"),
        "date" : ISODate("2020-02-11T18:30:00Z"),
        "order" : [
                {
                        "_id" : ObjectId("5e3a710af2657521e8c5668c"),
                         "punchCount" : "###1",
                        "leavecCount" : 5,
                     },
                   {
                        "_id" : ObjectId("5e3a710af2657521e8c5668b"),
                         "punchCount" : "###1",
                        "leavecCount" : 5,
                }
          ],
        "vendorId" : ObjectId("5e5642e32500b8273cbde3ac"),
        "dealerId" : ObjectId("5e1d82156a67173cb877f67d"),
        }
     {
        "_id" : ObjectId("5e3a710af2657521e8c5668a"),
        "date" : ISODate("2020-02-11T18:30:00Z"),
        "order" : [
                {
                        "_id" : ObjectId("5e3a710af2657521e8c5668c"),
                         "punchCount" : "###1",
                        "leavecCount" : 6,
                     },
                   {
                        "_id" : ObjectId("5e3a710af2657521e8c5668b"),
                         "punchCount" : "###1",
                        "leavecCount" : 2,
                }
          ],
        "vendorId" : ObjectId("5e5642e32500b8273cbde3ac"),
        "dealerId" : ObjectId("5e5906dfc749dc4498033f7f"),
        }

ПРИМЕЧАНИЕ : в документах могут быть разные vendorId иродительский идентификатор, если ничего не найдено, тогда я должен вернуть пустой массив, указать, что не так в моем запросе. Моя цель - найти все заказы из коллекции заказов, которые имеют одинаковые vendorId и dealerId, если он не соответствует чем должен возвращать пустой массив

1 Ответ

1 голос
/ 01 марта 2020

Ваше условие $match просто содержит логическое выражение:

$match: { $and: [...] }

Однако оно должно содержать запрос . Попробуйте это:

$match: { $expr: { $and: [...] } }
...