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

Sådan returneres dokumenter, hvor to felter har samme værdi

Du har to muligheder her. Den første er at bruge $where operatør.

Collection.find( { $where: "this.start === this.end" } )

Den anden mulighed er at bruge aggregeringsrammen og $redact operatør.

Collection.aggregate([
    { "$redact": { 
        "$cond": [
            { "$eq": [ "$start", "$end" ] },
            "$$KEEP",
            "$$PRUNE"
        ]
    }}
])

$where operatør laver en JavaScript-evaluering og kan ikke drage fordel af indekser, så forespørg ved hjælp af $where kan forårsage et fald i ydeevnen i din applikation. Se overvejelser . Hvis du bruger $where, vil hvert af dine dokumenter blive konverteret fra BSON til JavaScript-objekt før $where-operationen, hvilket vil forårsage et fald i ydeevnen. Selvfølgelig kan din forespørgsel forbedres, hvis du har et indeksfilter. Der er også en sikkerhedsrisiko, hvis du opbygger din forespørgsel dynamisk baseret på brugerinput.

$redact ligesom $where bruger ikke indekser og udfører endda en samlingsscanning, men din forespørgselsydeevne forbedres, når du $redact fordi det er en standard MongoDB-operatører. Når det er sagt, er aggregeringsmuligheden langt bedre, fordi du altid kan filtrere dit dokument ved hjælp af $match-operatoren.

$where her er fint, men kunne undgås. Jeg tror også, at du kun behøver $where når du har et skemadesignproblem. For eksempel kan tilføjelse af endnu et boolesk felt til dokumentet med indeks være en god mulighed her.



  1. Importerer csv til mongodb ved hjælp af PHP-kode

  2. MongoDB krydsdatabaseforespørgsel

  3. Kunne ikke finde datakilde:com.mongodb.spark.sql.DefaultSource

  4. Ny i MongoDB Kan ikke køre kommandoen mongo