sql >> Databáze >  >> NoSQL >> MongoDB

Mongodb $ kde dotaz vždy platí s nodejs

Nejprve mějte na paměti, že $where Operátor by se neměl téměř nikdy používat z důvodů vysvětlených zde (kredit patří @WiredPrairie).

Zpět k vašemu problému, přístup, který byste chtěli použít, nebude fungovat ani v prostředí mongodb (které explicitně umožňuje funkce nahého js s $where operátor). Kód javascript poskytnutý na $where operátor je spuštěn na mongo serveru a nebude mít přístup k okolnímu prostředí ("kontextové vazby").

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

Navíc to vypadá, že nativní mongo ovladač node.js se chová odlišně od shellu v tom, že automaticky neseerifikuje funkci js, kterou zadáte v objektu dotazu, a místo toho pravděpodobně úplně vypustí klauzuli. Tím získáte ekvivalent timetables.find({}) která vrátí všechny dokumenty ve sbírce.



  1. TTL pro člena sady

  2. Migrace socket.io z 0.9.x na 1.x, problémy s konfigurací RedisStore

  3. Dotazování dat z MongoDB pomocí GraphQL v Django:Get-Go (1)

  4. Server Discovery And Monitoring engine je zastaralý