#mongodb #mongoose
#mongodb #mongoose
Вопрос:
У меня есть mongodb
коллекция под названием tasks. Здесь T1.1
T1
есть подзадача T1.1.1
, T1.1
а также подзадача и так далее.. Уровни подзадач могут увеличиваться. Я использую mongodb
версию 4.0
. Ниже приведены данные сбора
---------------------------------------
task | parent_task_id | progress(%)
---------------------------------------
T1 | null | 20
---------------------------------------
T2 | null | 30
---------------------------------------
T1.1 | T1 | 10
---------------------------------------
T1.2 | T1 | 10
---------------------------------------
T1.1.1 | T1.1 | 10
---------------------------------------
T1.1.2 | T1.1 | 10
---------------------------------------
T1.1.1.1 | T1.1.1 | 10
---------------------------------------
Как мне рассчитать средний прогресс задачи T1
, включая все подзадачи ( T1.1,T1.2,T1.1.1,T1.1.2,T1.1.1.1
), используя mongodb
агрегации?
Заранее спасибо.
Ответ №1:
db.collection.aggregate([
{
$match: {
"task": {//Find all subtasks using pattern
$regex: "^T1.*"
}
}
},
{
$group: {
"_id": null,
"avg": {//Avg of the matched tasks' progress
"$avg": "$progress"
}
}
}
])
Комментарии:
1. Спасибо за ответ. Это решение работает нормально. Но если идентификатор задачи — это идентификатор, сгенерированный mongodb, то как мне этого добиться? @Gibbs
2. Как вы определяете, является ли это T1 или T2 с сгенерированным идентификатором mongo? У вас может быть другое поле для идентификации.
3. Спасибо @gibbs. Я сгенерирую один формат, чтобы я мог определить, связан ли он с задачей T1 или задачей T2
4. Рад, что это помогло. Если ответ полезен, можете ли вы одобрить и проголосовать?