Трубопровод в поиске не работает - PullRequest
0 голосов
/ 03 июля 2018

Я новичок в mongodb, поэтому я надеюсь, что это не выглядит как очень элементарный вопрос. Я провел некоторое исследование и попытался применить то, что нашел, но что-то, похоже, ускользнуло от меня.

У меня есть две коллекции следующего формата:

-----------------------------------------------------------------------
Shop
-----------------------------------------------------------------------
{
    "shopId": "1002",
    "shopPosId": "10002",
    "description": "some description"
}

-----------------------------------------------------------------------
Compte
-----------------------------------------------------------------------
{
    "shopId": "9000",
    "shopPosId": "0000",
    "clientUid": "474192"
}

Я хочу присоединиться к тем, и перед этим я хочу отфильтровать Shop s, которые не имеют поля shopPosId.

Вот мой код:

Compte.aggregate([
    {
        $match:
            { 
                $and:[{"clientUid":clientUid}]
            }
    },
    {      
        $lookup:
        {
            from: "Shop",
            localField: "shopId",
            foreignField: "shopId",
            let: {"Shop.shopPosId": "$shopPosId"},
            pipeline: [{$match: {"shopPosId": {"$exists": false}}}],
            as: "shopDescr"
        }
        }]
);

возвращаемый результат - undefined, что означает, что запрос не имеет особого смысла (потому что на самом деле я должен по крайней мере получить массив void).

Это потому, что две коллекции имеют поле shopPosId? (если это так, разве эта строка let: {"Shop.shopPosId": "$shopPosId"} не должна позаботиться об этом?)

1 Ответ

0 голосов
/ 03 июля 2018

Как прокомментировал Алекс, вы смешиваете синтаксис $lookup здесь ... Таким образом, правильным будет

Compte.aggregate([
  { "$match": { "$and": [{ "clientUid": clientUid }] }},
  { "$lookup": {
    "from": "Shop",
    "let": { "shopId": "$shopId" },
    "pipeline": [
      { "$match": {
        "$expr": { "$eq": [ "$shopId", "$$shopId" ] },
        "shopPosId": { "$exists": false }
      }}
    ],
    "as": "shopDescr"
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...