sql >> Databáze >  >> NoSQL >> MongoDB

Nelze vypočítat průměrný čas

Podle komentáře je váš problém jedním z vytvoření platného JavaScriptu. Také vaše „klíčová“ hodnota se nezdá být tím, co opravdu chcete. Existuje však agregát funkce, kterou byste měli upřednostňovat před použitím "skupiny"

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

Typ agregačního kanálu nahrazuje dříve zavedené funkce, jako je group a distinct . A pro všechny operace kromě triviálních měl by být vaší oblíbenou volbou.

Poběží mnohem rychleji, protože je zpracován v nativním kódu a ne v JavaScriptovém enginu.

Podívejte se také na graf mapování SQL na agregaci v dokumentaci.

Problémy s daty

Váš vzorek není příliš úplný. Abych vyřešil všechny problémy, musím vložit do dokumentu, jako je tento:

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

Také váš příklad dokumentu obsahuje některá neplatná pole:

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

Toto pole tedy nemůže existovat, protože má . v názvu pole, což je zřejmý poddokument důvody nejsou povoleny.



  1. Nejlepší schéma MongoDB pro twitterový klon?

  2. Automaticky generované pole pro MongoDB pomocí Spring Boot

  3. Spouštění Mongo like Query (JSON) prostřednictvím Javy

  4. Jak aktualizujete objekty v poli dokumentu (vnořená aktualizace)