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

Mongodb $hvor forespørgsel altid er sand med nodejs

Først skal du huske på, at $where operatør bør næsten aldrig bruges af de årsager, der er forklaret her (kreditten går til @WiredPrairie).

Tilbage til dit problem, den tilgang, du gerne vil tage, fungerer ikke engang i mongodb-skallen (som eksplicit tillader nøgne js-funktioner med $where operatør). Javascript-koden, der leveres til $where operatør udføres på mongo-serveren og vil ikke have adgang til det omsluttende miljø ("kontekstbindingerne").

> db.test.insert({a: 42})
> db.test.find({a: 42})
{ "_id" : ObjectId("5150433c73f604984a7dff91"), "a" : 42 }
> db.test.find({$where: function() { return this.a == 42 }}) // works
{ "_id" : ObjectId("5150433c73f604984a7dff91"), "a" : 42 }
> var local_var = 42
> db.test.find({$where: function() { return this.a == local_var }})
error: {
    "$err" : "error on invocation of $where function:\nJS Error: ReferenceError: local_var is not defined nofile_b:1",
    "code" : 10071
}

Desuden ser det ud til, at node.js native mongo-driveren opfører sig anderledes end skallen, idet den ikke automatisk serialiserer en js-funktion, du angiver i forespørgselsobjektet, og i stedet forsvinder den sandsynligvis klausulen helt. Dette vil efterlade dig med det, der svarer til timetables.find({}) som vil returnere alle dokumenter i samlingen.



  1. installer redis på aws micro-instans

  2. Placering af mongodb-databasen på mac

  3. Cloudera Operational Database applikationsudviklingskoncepter

  4. Mongodump fra fjernserver