#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
}
}
])