2016-06-28 2 views
3

У меня этот запрос:MongoDB другой результат агрегации

db.collection.aggregate([ 
    { 
    $group: { 
     _id: "$PATIENT_ID", 
     MASS: { $max: "$max_field" } 
    } 
    } 
]); 

В результате этого запроса:

{ "_id" : "TCGA-A2-A0YD", "mass" : 0.994683301742671 } 
{ "_id" : "TCGA-A2-A3XX", "mass" : 0.993455527786917 } 

У меня есть этот второй запрос:

db.collection.aggregate([ 
    { 
    $group: { 
     _id: "TCGA-A2-A3XX", 
     MASS: { $max: "$max_field" } 
    } 
    } 
]); 

Результат этот второй запрос:

{ "_id" : "TCGA-A2-A3XX", "mass" : 0.994683301742671 } 

Почему? Я ожидал, что другое значение для этого идентификатора TCGA-A2-A3XX

ответ

3

Вашей проблема заключается в том, что вы группировать все документы постоянного "TCGA-A2-A3XX" и поэтому вы получаете одну группу с этим идентификатором и вычислить максимум поля из всех документов.
Я думаю, вы хотите добавить стадию $match в свой конвейер для фильтрации вашего конкретного пациента.

db.collection.aggregate([ 
    { 
    $match: { 
     PATIENT_ID: "TCGA-A2-A3XX" 
    } 
    }, 
    { 
    $group: { 
     _id: "$PATIENT_ID", 
     MASS: { $max: "$max_field" } 
    } 
    } 
]); 
+0

Спасибо за ответ. Я не знаю, почему в первом случае я получаю: TCGA-A2-A3XX, 0.993455527786917, а во втором случае я получаю TCGA-A2-A3XX 0.994683301742671 – mydb

+2

Потому что в первом случае вы используете «$ PATIENT_ID», который ссылается на документы 'field "PATIENT_ID", и поэтому вы группируете значения этого поля. В другом случае вы группируете константу, которая всегда будет приводить к одной группе. – DAXaholic

+0

Хорошо, но TCGA-A2-A3XX является одним из значений поля PATIENT_ID – mydb

Смежные вопросы