Проблемы с агрегацией MongoDB - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь посчитать средний ИМТ для каждой национальности в моей базе данных. Я должен был бросить вес и рост в двойном размере, потому что $ avg возвращал ноль

db.people.aggregate
(
    {
        $group:
       {
            _id:"$nationality",
            avgBMi:
            {
                $avg:
                {
                    $divide:
                    [
                        {$toDouble:"$weight",$pow:[{$toDouble:"$height"},2]}
                    ]
                }
            } 
        }
    }   
)

но я получаю ошибки, и я не знаю, как их исправить

"errmsg" : "An object representing an expression must have exactly one 
field: { $toDouble: \"$weight\", $pow: [ { $toDouble: \"$height\" }, 2.0 ] }"

тогда я прочитал о матче и группе, поэтому я сделал

db.people.aggregate
(
   {$group:
   {
       _id:"$nationality"
   }},
   {
       $match:{
           avgBMi:
            {
                $avg:
                {
                    $divide:
                    [
                        {$toDouble:"$weight",$pow:[{$toDouble:"$height"},2]}
                    ]
                }
            }  

       }
   }
)

и я получаю

"errmsg" : "unknown operator: $avg"

вот образец моей коллекции

{
  "_id": {
    "$oid": "5be18d5cedc30c3a396e3651"
  },
  "sex": "Female",
  "first_name": "Frances",
  "last_name": "Romero",
  "job": "Project Manager",
  "email": "fromeroc@ted.com",
   "location": {
     "city": "Yantang",
     "address": {
      "streetname": "Holy Cross",
       "streetnumber": "33801"
     }
   },
   "description": "non velit nec nisi vulputate nonummy maecenas tincidunt 
    lacus at velit",
    "height": "179.89",
    "weight": "67.8",
    "birth_date": "1954-03-25T11:51:38Z",
    "nationality": "China"
}

Не могли бы вы, ребята, помочь мне?

1 Ответ

0 голосов
/ 06 ноября 2018

Вы были близки с первой попытки, но преобразования веса и роста должны быть отдельными объектами:

db.people.aggregate([
   {$group:
   {
       _id:"$nationality",
       avgBMi:
        {
            $avg:
            {
                $divide:
                [
                    {$toDouble:"$weight"},
                    {$pow:[{$toDouble:"$height"},2]}
                ]
            }
        }             
   }}
])

Выход:

{ "_id" : "China", "avgBMi" : 0.0020951525521518315 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...