MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Nie można obliczyć średniego czasu

Zgodnie z komentarzem, Twoim problemem jest tworzenie poprawnego kodu JavaScript. Również wartość „klucza” nie wydaje się być tym, czego naprawdę chcesz. Istnieje jednak agregat funkcja, którą powinieneś preferować nad używaniem "grupy"

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" ] }
   }}
])

Rodzaj potoku agregacji zastępuje wcześniej wprowadzone funkcje, takie jak group i distinct . I dla wszystkich poza trywialnymi operacjami powinien bądź twoim ulubionym wyborem.

Będzie działać znacznie szybciej, ponieważ jest to przetwarzane w kodzie natywnym, a nie w silniku JavaScript.

Zobacz także wykres mapowania SQL do agregacji w dokumentacji.

Problemy z danymi

Twoja próbka nie jest kompletna. Aby uporządkować wszystkie problemy, które muszę umieścić w dokumencie takim jak ten:

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

Również twój przykładowy dokument zawiera kilka nieprawidłowych pól:

{
    "_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
},

Więc to pole nie może istnieć, ponieważ ma . w nazwie pola, co jest oczywistym dokumentem podrzędnym powody są niedozwolone.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Model.find nie jest funkcją w manguście

  2. MongoDB - aktualizuj dokument podrzędny za pomocą $set

  3. jak uruchomić natywne zapytanie mongodb z funkcją daty mongodb w spring-data-mongodb?

  4. MongoDB C# Driver i wygenerowane przez serwer identyfikatory ObjectId

  5. Sortuj podpola z nieznanym rodzicem