Вы пытаетесь использовать оператор агрегирования как часть проекционного документа.Проекционный документ предназначен для использования в простых запросах только для возврата определенных полей.
То, что вы хотите использовать, - это этап $project
в конвейере агрегации .Это отличается от простого проекционного документа, и вы можете использовать более сложные операторы агрегирования, такие как $size
.Вот пример кода, который, я считаю, делает то, что вы хотели бы:
ctx := context.TODO()
pipeline := bson.A{
bson.D{{
"$project",
bson.D{
{"foo", 1},
{"nrOfBars", bson.D{
{"$size", "$bar"},
}},
},
}},
}
cur, err := col.Aggregate(ctx, pipeline)
Эта агрегация возвращает курсор.Чтобы получить доступ к результатам, вы должны выполнить итерацию курсора, как описано в документации по .