sql >> Database >  >> NoSQL >> MongoDB

Documenten retourneren waarin twee velden dezelfde waarde hebben

Je hebt hier twee opties. De eerste is om de $where te gebruiken telefoniste.

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

De tweede optie is om het aggregatieraamwerk en de $redact telefoniste.

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

De $where operator voert een JavaScript-evaluatie uit en kan geen gebruik maken van indexen, dus zoek op met $where kan leiden tot prestatieverlies in uw toepassing. Zie overwegingen . Als u $where gebruikt, wordt elk van uw documenten geconverteerd van BSON naar JavaScript-object vóór de $where-bewerking, waardoor de prestaties afnemen. Natuurlijk kan uw zoekopdracht worden verbeterd als u een indexfilter heeft. Er is ook een beveiligingsrisico als u uw zoekopdracht dynamisch bouwt op basis van gebruikersinvoer.

De $redact zoals de $where gebruikt geen indexen en voert zelfs een collectiescan uit, maar uw queryprestaties verbeteren wanneer u $redact omdat het een standaard MongoDB-operator is. Dat gezegd hebbende, is de aggregatie-optie veel beter omdat u uw document altijd kunt filteren met de $ match-operator.

$where hier is prima, maar kan worden vermeden. Ik geloof ook dat je alleen $where . nodig hebt wanneer u een probleem hebt met het ontwerpen van een schema. Het toevoegen van een ander booleaans veld aan het document met index kan hier bijvoorbeeld een goede optie zijn.



  1. Maak knooppuntenboom met recursieve tabel met Express en Mongo

  2. Mongodb-aggregatie:alleen overeenkomende elementen van een array retourneren?

  3. Hoe hetzelfde veld meerdere keren te gebruiken in MongoDB zoekquery in NodeJS

  4. MongoDB Regex Zoeken op Integer Value