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

Hent underdokumenter, der matcher den maksimale værdi i arrayet

Den optimale bedste måde at gøre dette på er i MongoDB 3.2 eller nyere. Vi skal $project vores dokumenter og brug $filter operatør for at returnere en delmængde af "topicInfo"-arrayet, der matcher vores tilstand. Og fra og med MongoDB3.2 kan vi bruge $max i $project trin i tilstand ition-udtryk og udføre en logisk operation på den returnerede værdi.

Den sidste fase i pipelinen er $match trin, hvor du filtrerer disse dokumenter fra med tomme "topicInfo" ved hjælp af $eksisterer elementforespørgselsoperator og punktnotation for at få adgang til det første element i arrayet. Dette reducerer også både mængden af ​​data, der sendes over ledningen, og den tid og hukommelse, der bruges til at afkode dokumenter på klientsiden.

db.collection.aggregate([
    { "$project": { 
        "topicInfo": { 
            "$filter": { 
                "input": "$topicInfo", 
                "as": "t", 
                "cond": { 
                    "$and": [ 
                        { "$eq": [ "$$t.topic", "topic2"] }, 
                        { "$eq": [ "$$t.time", { "$max": "$topicInfo.time" } ] }
                    ] 
                } 
            } 
        } 
    }},
    { "$match": { "topicInfo.0": { "$exists": true } } }
])


  1. Hvordan sikrer man en unik vare i et array baseret på specifikke felter - mongoDB?

  2. Opretter forbindelse til mongodb ved hjælp af mongoose og Fixie (Heroku-tilføjelse)

  3. Node JS Redis Client Connection Prøv igen

  4. Sådan forbinder du fjernbetjening mongodb med pymongo