Преобразование SQL-запроса в агрегацию Монго - PullRequest
0 голосов
/ 07 февраля 2019

Я очень новичок в mongodb и, следовательно, интенсивно работая с SQL, я хочу попробовать сделать то же самое с mongo, как и с SQL-запросом.

У меня есть 2 коллекции:

Полеты Атрибуты: ID (STRING) ПРОВЕРЕНО (STRING) ДЕЙСТВИТЕЛЬНО (STRING)

Миссия Атрибуты: ID (STRING) ПОЛЕТЫ (СТРЕЛКА)

Мне нужно получить данные в соответствии с запросом SQL, который выглядит (теоретически):

SELECT VERIFIED, VALID 
FROM FLIGHT
WHERE FLIGHT.ID IN
 ( SELECT FLIGHTS
FROM MISSION
WHERE MISSION.ID = "somestring"
AND
FLIGHT.ID = MISSION.FLIGHTS)

Пример документов в коллекциях:

Полет

{
  "_id": ObjectId("5c4ae5b6a2ac3bc9f2e1b943"),
  "verified": "true",
  "valid": "true"
}

Миссия

{
  "_id": ObjectId("5c5acdd8bbf999dc34d96de7"),
  "flights":[
      ObjectId("5c4ae5b6a2ac3bc9f2e1b943"),
      ObjectId("5c4ae5eea2ac3bc9f2e1b961")
      ]
 }

Я очень смущен тем, как мне следует использовать "$ lookup" и "$ unwind".

Проще говоря, цель моего агрегирования:

Мне нужно получить ДЕЙСТВИТЕЛЬНЫЕ и ПРОВЕРЕННЫЕ все ПОЛЕТЫ, которые присутствуют в МИССИИ, чей ID "somestring"

1 Ответ

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

Вы можете использовать ниже Агрегация

db.mission.aggregate([
      {
        $match: { "_id": "Here is mission Object Id" }
      },
      {
        $lookup: {
          from: "flight",
          let: { flightIds: "$flights" },
          pipeline: [
           {
              $match: {
                $expr: { $in: [ "$_id", "$$flightIds" ]}
              }
            }
          ],
          as: "result"
        }
      }
    ])

Вы можете попробовать это на Здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...