нужно получить соответствующие записи после $ lookup и $ match в запросе Монго - PullRequest
0 голосов
/ 04 декабря 2018

Запрос агрегации:

db.status.aggregate([
  {
    "$lookup": {
      "from": "order",
      "localField": "orderId",
      "foreignField": "_id",
      "as": "output"
    }
  },
  {
    "$match": {
      "output.status": "PICKUP_COMPLETE"
    }
  },
  {
    "$project": {
      "orderId": 1,
      "orderStatus": {
        "$filter": {
          "input": "$orderStatus",
          "as": "orderStatus",
          "cond": { "$eq": ["$$orderStatus.status", "PICKUP_COMPLETE"] }
        }
      }
    }
  }
])

Запись сбора статуса:

{
  "_id": ObjectId("59490963d683587d32c278ac"),
  "orderId": ObjectId("5949095ed683587d32c278a9"),
  "tenantId": "D-mart",
  "orderStatus": [
    {
      "status": "ESTIMATES_RECEIVED",
      "updatedAt": "June 20th 2017, 6:39:15 am"
    },
    { "status": "RECEIVED_BY_LMA", "updatedAt": "June 20th 2017, 6:45:25 am" },
    { "status": "ORDER_CONFIRMED", "updatedAt": "June 20th 2017, 6:45:25 am" }
  ]
}

Мне нужно получить все подходящие записи из сбора заказов и сбора статусов на основе поля orderId и записи о совпаденияхкоторые имеют статус «PICKUP_COMPLETE» в массиве orderStatus (любой объект массива должен иметь этот статус).

Приведенный выше запрос работает нормально, объединяя две коллекции на основе orderId, но возвращает только первую соответствующую запись,т.е.

{
  "_id": ObjectId("5a7e0a06a33f4900015c14d7"),
  "orderId": ObjectId("5a7e0a06a33f4900015c14d6"),
  "orderStatus": [
    {
      "status": "PICKUP_COMPLETE",
      "updatedAt": "February 14th 2018, 11:51:09 am"
    }
  ]
}

Я хотел бы знать, как получить полный список таких совпадающих записей ...

...