sql >> Database teknologi >  >> NoSQL >> MongoDB

Returner den sidste sande værdi for hver gruppe

Den bedste måde at gøre dette på er at bruge aggregeringsrammen. Du skal $group dine dokumenter efter "bruger" og returner det sidste dokument for hver bruger ved hjælp af $last akkumulator operatør, men for at dette skal fungere, skal du bruge et foreløbigt sorteringstrin ved hjælp af $sort aggregeringsrørledningsoperatør. For at sortere dine dokumenter skal du overveje både feltet "createdAt" og feltet "bruger".

Det sidste trin i pipelinen er $match trin, hvor du kun vælger de sidste dokumenter, hvor "isAbandoned" er lig med true .

db.students.aggregate([
    { "$sort": { "user": 1, "createdAt": 1 } }, 
    { "$group": { 
        "_id": "$user", 
        "last": { "$last": "$$ROOT" }
    }}, 
    { "$match": { "last.isAbandoned": true } }
])

som returnerer noget som dette:

{ 
    "_id" : ObjectId("56c85244bd5f92cd78ae4bc1"),
    "last" : {
        "_id" : ObjectId("56cee51503b7cb7b0eda9c4c"),
        "user" : ObjectId("56c85244bd5f92cd78ae4bc1"),
        "studentName" : "Rajeev",
        "createdAt" : ISODate("2016-02-25T11:27:17.281Z"),
        "isAbandoned" : true
    }
}

For at få det forventede resultat skal vi bruge $replaceRoot pipeline-operatør fra version 3.4 for at fremme det indlejrede dokument til det øverste niveau

{
    $replaceRoot: { newRoot: "$last" }
}

I ældre version skal du bruge $project aggregeringspipeline-operation for at omforme vores dokumenter. Så hvis vi udvider vores pipeline med følgende fase:

{ 
    "$project": { 
        "_id": "$last._id", 
        "user": "$last.user", 
        "studentName": "$last.studentName", 
        "createdAt": "$last.createdAt", 
        "isAbandoned": "$last.isAbandoned"
}}

det producerer det forventede output:

{
    "_id" : ObjectId("56cee51503b7cb7b0eda9c4c"),
    "user" : ObjectId("56c85244bd5f92cd78ae4bc1"),
    "studentName" : "Rajeev",
    "createdAt" : ISODate("2016-02-25T11:27:17.281Z"),
    "isAbandoned" : true
}


  1. Auto-genereret felt til MongoDB ved hjælp af Spring Boot

  2. Sådan indstilles mongod.conf bind_ip med flere ip-adresser

  3. Tilslutning af MongoDB fra mobil- eller browserbaseret applikation

  4. MongoDB $switch