sql >> Database >  >> NoSQL >> MongoDB

Aggregate Query in Mongodb retourneert een specifiek veld

Het eerste dat je hier verkeerd doet, is niet begrijpen hoe $project bedoeld is om te werken. Pijplijnstadia zoals $project en $group zal alleen de velden uitvoeren die "expliciet" zijn geïdentificeerd. Dus alleen de velden waarvan u zegt dat ze moeten worden uitgevoerd, zijn beschikbaar voor de volgende pijplijnfasen.

Specifiek hier "projecteert" u slechts een deel van het "u"-veld in uw document en heeft u daarom de andere gegevens verwijderd om beschikbaar te zijn. Het enige huidige veld hier is nu "naam", dat is het veld dat u "geprojecteerd" heeft.

Misschien was het echt je bedoeling om zoiets als dit te doen:

db.collectiontmp.aggregate([
    { "$group": {
        "_id": {
           "_id": "$u._id",
           "email": { "$toUpper": "$u.e" }
        },
        "total": { "$sum": 1 },
    }},
    { "$project": {
        "_id": 0,
        "email": "$_id.email",
        "total": 1
    }},
    { "$sort": { "total": -1 } },
    { "$limit": 10 }
])

Of zelfs:

db.collectiontmp.aggregate([
    { "$group": {
        "_id": "$u._id",
        "email": { "$first": { "$toUpper": "$u.e" } }
        "total": { "$sum": 1 },
    }},
    { "$project": {
        "_id": 0,
        "email": 1,
        "total": 1
    }},
    { "$sort": { "total": -1 } },
    { "$limit": 10 }
])

Dat geeft je het soort output waarnaar je op zoek bent.

Onthoud dat aangezien dit een "pijplijn" is, alleen de "output" van een eerdere fase beschikbaar is voor de "volgende" fase. Er is geen "algemeen" concept van het document, aangezien dit geen declaratieve verklaring is zoals in SQL, maar een "pijplijn".

Dus denk aan Unix-pijp "|" commando, of zoek dat anders op. Dan vallen je gedachten op hun plaats.




  1. Welke database te kiezen (Cassandra, MongoDB, ?) voor het opslaan en opvragen van gebeurtenis- / log- / metrische gegevens?

  2. maak verbinding met een mongodb-instantie zonder --authenticationDatabase admin

  3. Element invoegen in geneste arrays in MongoDB

  4. groepeer per dag/maand en neem het gemiddelde van de beoordeling op die dag/maand in mongo