sql >> Database >  >> NoSQL >> MongoDB

Mongodb $where-query altijd waar met nodejs

Houd er allereerst rekening mee dat de $where operator mag bijna nooit worden gebruikt om de redenen die hier worden uitgelegd (tegoed gaat naar @WiredPrairie).

Terug naar uw probleem, de aanpak die u wilt gebruiken, werkt niet, zelfs niet in de mongodb-shell (die expliciet naakte js-functies toestaat met de $where exploitant). De javascript-code die is verstrekt aan de $where operator wordt uitgevoerd op de mongo-server en heeft geen toegang tot de omsluitende omgeving (de "contextbindingen").

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

Bovendien lijkt het erop dat het node.js native mongo-stuurprogramma zich anders gedraagt ​​dan de shell, omdat het een js-functie die u in het query-object opgeeft, niet automatisch serialiseert en in plaats daarvan de clausule waarschijnlijk helemaal laat vallen. Dit geeft je het equivalent van timetables.find({}) die alle documenten in de collectie teruggeeft.



  1. Hoe de console in MongoDB te wissen

  2. MongoDB $ronde

  3. Hernoem een ​​veld in de queryresultaten in MongoDB

  4. Haal het aantal open verbindingen in mongoDB op met java