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

Hvordan bruger man $slice et $filter-resultat i MongoDB?

Én måde at gøre det på ville gerne være denne (der er ikke behov for $match-stadiet afhængigt af strukturen af ​​dine data og din indekseringsopsætning, men du vil måske stadig beholde det af ydeevnemæssige årsager):

 db.item.aggregate([
    { "$project": { 
        "items": { 
            "$slice": [ 
                { "$filter": { 
                    "input": "$items",
                    "as": "item", 
                    "cond": { "$eq": [ "$$item.status", "active" ] } 
                }}, 
                -3,2 
            ] 
        } 
    }}
])

Jeg vil mene, at det nok er bedre at bruge følgende forespørgsel:

db.items.db.aggregate([
{
    $project: {
        "items": {
            "$filter": { 
                "input": "$items",
                "as": "item", 
                "cond": { "$eq": [ "$$item.status", "active" ] } 
            }
        } 
    }
}, {
    $project: {
        "items": {
            $slice: [
                {
                    $slice: [
                        "$items",
                        {
                            $subtract: [ { $size: "$items" }, 1 ] // length of items array minus one
                        } 
                    ]
                }, 2 // max two elements
            ]
        }
    }
}])

da denne først vil slippe af med det sidste element og derefter begrænse outputtet til to elementer, hvilket sandsynligvis er mere, hvad du ønsker i en situation med mindre end 3 "aktive" elementer.




  1. TypeError:callback.apply er ikke en funktion (Node.js &Mongodb)

  2. Hvordan kan man omgå manglen på transaktioner i MongoDB?

  3. 4 måder at opdatere et dokument i MongoDB

  4. Hvordan kan jeg hoste min egen Parse Server på Heroku ved hjælp af MongoDB?