sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb $där frågan alltid är sann med nodejs

Först och främst, kom ihåg att $where operatör bör nästan aldrig användas av de skäl som förklaras här (krediten går till @WiredPrairie).

Tillbaka till ditt problem, tillvägagångssättet du vill använda fungerar inte ens i mongodb-skalet (som uttryckligen tillåter nakna js-funktioner med $where operatör). Javascript-koden som tillhandahålls till $where operatören körs på mongo-servern och kommer inte att ha tillgång till den omslutande miljön ("kontextbindningarna").

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

Dessutom ser det ut som att node.js infödda mongo-drivrutin beter sig annorlunda än skalet genom att den inte automatiskt serialiserar en js-funktion som du tillhandahåller i frågeobjektet och istället tar den troligen satsen helt och hållet. Detta ger dig motsvarigheten till timetables.find({}) som kommer att returnera alla dokument i samlingen.



  1. Node redis utgivare förbrukar för mycket minne

  2. MongoDB uppdaterar fält i kapslad array

  3. Vad är poängen med flera Redis-databaser?

  4. Spring Data RedisMall:Serialisera värdet och HashValue