Использование $lookup для возврата документов только за определенный период времени

#database #mongodb #aggregation-framework

#База данных #mongodb #aggregation-framework

Вопрос:

Я пытаюсь выполнить $lookup, который объединяет две коллекции (пользователи и запуски, отношение «один ко многим»), которые имеют поле discord_id . Однако в то же время я пытаюсь отфильтровать все документы из коллекции runs, которые не попадают в определенный период времени. Я попытался использовать шестнадцатеричные строки ObjectId, чтобы сделать это с помощью $match: $gte, как показано ниже, но не получил его для возврата массива с любыми объектами в нем.

 pipeline[
{ $match: { $gte: { _id: ObjectId("5f9506500000000000000000") } } }
]
  

Конечный результат должен иметь объект User со многими объектами run в массиве. Объекты запуска должны быть только из определенного временного диапазона.

Ответ №1:

Попробуйте это :

Вы можете использовать $toDate для получения time коэффициента from ObjectId . Я ввел некоторые поля, такие как createDate и bool . вы можете скрыть их, используя $project stage в конце.

 db.collection.aggregate([
  {
    "$set": {
      "createDate": {
        $toDate: "$_id"
      }
    }
  },
  {
    "$set": {
      bool: {
        "$gt": [
          "$createDate",
          {
            $toDate: ObjectId("5ab9c3da31c2ab715d421285")
          }
        ]
      }
    }
  },
  {
    "$match": {
      bool: true
    }
  }
])
  

Игровая площадка Mongo