Функция агрегирования MongoDB - PullRequest
1 голос
/ 01 мая 2020

Я пытаюсь посчитать средний вес и рост для каждого пола в моей базе данных. Я должен был сгруппировать его по полу, но $avg возвращал ноль как по весу, так и по росту. Есть идеи как это исправить?

db.getCollection("people").aggregate(
    [
        {
            $group: {
                _id: { sex: "$sex" },
                avgH: { $avg: "$height" },
                avgW: { $avg: "$weight" }
            }
        }
    ]
);

Пример модели данных:

{ 
    "_id" : ObjectId("5ea970747cd4ac05869977ec"), 
    "sex" : "Male", 
    "first_name" : "Wayne", 
    "last_name" : "Fields", 
    "job" : "Speech Pathologist", 
    "email" : "wfields0@diigo.com", 
    "location" : {
        "city" : "Oyo", 
        "address" : {
            "streetname" : "Beilfuss", 
            "streetnumber" : "860"
        }
    }, 
    "description" : "vulputate justo in blandit ultrices enim lorem ipsum dolor sit amet consectetuer adipiscing elit proin interdum mauris", 
    "height" : "152.38", 
    "weight" : "66.81", 
    "birth_date" : "1990-02-21T02:55:03Z", 
    "nationality" : "Nigeria", 
    "credit" : [
        {
            "type" : "switch", 
            "number" : "6759888939100098699", 
            "currency" : "COP", 
            "balance" : "5117.06"
        }
    ]
}

1 Ответ

1 голос
/ 01 мая 2020

Согласно документации :

$ avg игнорирует ненумерованные c значения.

вам необходимо преобразовать weight и height от string до double с использованием $ toDouble (MongoDB 4.0 или новее):

db.collection.aggregate([
    {
        $group: {
            _id: { sex: "$sex" },
            avgH: { $avg: { $toDouble: "$height" } },
            avgW: { $avg: { $toDouble: "$weight" } },
        }
    }
])

Пн go Детская площадка

...