Мне нужно напечатать документы с более чем средним значением одного поля в одной коллекции.
В конвейере агрегации я не получаю параметр avg_pmnt, доступный для этапа $match
(следующий этап)
Для следующего кода
db.payments.aggregate([
{$group: {
"_id":1,
"avg_pmnt": {$avg: "$AMOUNT"},
"AMNT": {$push: "$AMOUNT"}
} },
{$unwind: "$AMNT"},
{$project: {avg_pmnt: "$avg_pmnt", AMNT: "$AMNT"}},
])
Я получаю следующий вывод:
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 14191 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 32642 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 33348 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 45864 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 82261 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 7565 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 44895 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 19502 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 47924 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 49524 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 50219 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 1491 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 17876 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 34638 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 101245 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 85411 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 11044 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 83598 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 6067 }
{ "_id" : 1, "avg_pmnt" : 32431.65567765568, "AMNT" : 14571 }
Тип "it"
для более
Но я хочучтобы отфильтровать их
Итак, я попробовал это:
db.payments.aggregate([
{$group: {
"_id":1,
"avg_pmnt": {$avg: "$AMOUNT"},
"AMNT": {$push: "$AMOUNT"}
} },
{$unwind: "$AMNT"},
{$project: {avg_pmnt: "$avg_pmnt", AMNT: "$AMNT"}},
{$match: {AMNT: {$gt: "$avg_pmnt"} }}
])
Для которого я не получаю никаких документов (пустой набор).
Я также пытался
db.payments.aggregate([
{$group: {
"_id":1,
"avg_pmnt": {$avg: "$AMOUNT"},
"AMNT": {$push: "$AMOUNT"}
} },
{$unwind: "$AMNT"},
{$project: {avg_pmnt: "$avg_pmnt", AMNT: "$AMNT"}},
{$match: {AMNT: {$gt: 1} }}
])
, для которого я получаю все документы, поскольку условие удовлетворяет каждому документу.