MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Не може да се изчисли средното време

Според коментара проблемът ви е свързан с формирането на валиден JavaScript. Също така вашата „ключова“ стойност няма да изглежда това, което наистина искате. Съществува обаче агрегат функция, която трябва да предпочитате пред използването на "група"

db.results.aggregate([
    { "$match": {
        "$and": [
            { "profile.Zend_Http_Client_Adapter_Socket::read==>fgets.wt": {
                "$exists": true 
            }},
            { "profile.Zend_Http_Client_Adapter_Socket::read==>fgets.wt": { 
               "$not": { "$type": 2 }
            }}
        ]
    }},
    { "$group": {
        "_id": null,
        "total": { "$sum": 
            "$profile.Zend_Http_Client_Adapter_Socket::read==>fgets.wt"
        },
        "count": { "$sum": 1 }
    }},

    { "$project": {
        "_id": 0,
        "avg": { "$divide": [ "$total", "$count" ] }
   }}
])

Конвейерът за агрегиране някак замества въведените по-рано функции като group и distinct . И за всички освен тривиалните операции трябва бъде вашият предпочитан избор.

Ще работи много по-бързо, тъй като това се обработва в собствен код, а не в двигателя на JavaScript.

Вижте също диаграма за съпоставяне на SQL към агрегиране в документацията.

Проблеми с данните

Вашата извадка не е много пълна. За да разреша всички проблеми, трябва да поставя в документ като този:

{
    "profile": {
        "Zend_Http_Client_Adapter_Socket::read==>fgets": {                                           
            "ct" : 3,
            "wt" : 54782314,
            "cpu" : 16001,
            "mu" : 83288,
            "pmu" : 49648
        },
    }
}

Също така вашият пример за документ има някои невалидни полета в него:

{
    "_id" : ObjectId("532a2a986803faba658b456b"),
    "profile" : {
        "main()==>register_shutdown_function" : {
            "ct" : 1,
            "wt" : 13,
            "cpu" : 0,
            "mu" : 1568,
            "pmu" : 1000
        },
        "main()==>load::htdocs/index.php" : { <-- Invalid
            "ct" : 1,
            "wt" : 17,
            "cpu" : 0,
            "mu" : 1736,
            "pmu" : 4296
},

Така че това поле не може да съществува, тъй като има . в името на полето, което за очевиден поддокумент причини не е позволено.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Проверка на здравето на Mongodb стъпка по стъпка

  2. mongoose, за да определи, че update-upsert прави вмъкване или актуализиране

  3. Обратно редовно изражение на MongoDB

  4. Извличане на дължината на списък в MongoDB

  5. Елемент на масив за актуализиране на документ MongoDB с помощта на метода findOneAndUpdate в Java