sql >> Database >  >> NoSQL >> MongoDB

Hoe gebruik je $ slice een $ filterresultaat in MongoDB?

Een manier om dit te doen zou als volgt kunnen zijn (de $match-fase is niet nodig, afhankelijk van de structuur van uw gegevens en uw indexeringsconfiguratie, maar misschien wilt u deze om prestatieredenen toch behouden):

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

Ik denk echter dat het waarschijnlijk beter is om de volgende query te gebruiken:

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

omdat deze eerst het laatste element verwijdert en vervolgens de uitvoer beperkt tot twee items, wat waarschijnlijk meer is wat u wilt in een situatie met minder dan 3 "actieve" elementen.




  1. Predis geeft 'Fout bij het lezen van regel van server'

  2. ReferenceError:TextEncoder is niet gedefinieerd met mongodb-knooppunten

  3. Langzame zoekopdracht in mongodb simuleren?

  4. Hoe authenticeert Mongolab REST API?