Как написать монго-запрос для встраивания документа - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть требование, когда мне нужно выбрать другое поле из другого документа

{
  "isbn":"1234567890",
  "title":"Mongo db",
  "formats":[
      {"isMaster":"true",
      "digiform":"EBK",
      "isbn":"6563636222"},
      {"isMaster":"false",
      "digiform":"EBGE",
      "isbn":"333554445447"
      },
      {"isMaster":"false",
      "digiform":"HARD",
      "isbn":"776655440011"
      }
   ]
}

{
  "isbn":"11111",
  "title":"SQL",
  "formats":[
      {"isMaster":"false",
      "digiform":"EBK",
      "isbn":"22222"},
      {"isMaster":"false",
      "digiform":"EBGE",
      "isbn":"33333"
      },
      {"isMaster":"false",
      "digiform":"HARD",
      "isbn":"444444"
      }
   ]
}
 {
      "isbn":"AABB11",
      "title":"Linux",
      "formats":[
          {"isMaster":"true",
          "digiform":"EBGE",
          "isbn":"5555555"}
       ]
    }

Я хочу получить заголовок и ISBN объекта, для которого isMaster true и имеет по крайней мере один формат, значение которого для digiform равно EBGE

так что результат будет

Title      ISBN   
Mongo db   6563636222 
Linux      5555555

Примечание: я не могу изменить объект

1 Ответ

0 голосов
/ 03 сентября 2018
db.state.aggregate(

// Pipeline
[
    // Stage 1
    {
        $unwind: {
            path : "$formats",
            preserveNullAndEmptyArrays : false 
        }
    },

    // Stage 2
    {
        $match: {
            "formats.isMaster":"true",
            "formats.digiform":"EBGE"
        }
    },

    // Stage 3
    {
        $group: {
            "_id":"$_id",
            "title":{$last:"$title"},
            "isbn":{$last:"$formats.isbn"}
        }
    },
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...