Pertama, perlu diingat bahwa $where
operator hampir tidak boleh digunakan karena alasan yang dijelaskan di sini (kredit masuk ke @WiredPrairie).
Kembali ke masalah Anda, pendekatan yang ingin Anda ambil tidak akan berfungsi bahkan di shell mongodb (yang secara eksplisit mengizinkan fungsi js telanjang dengan $where
operator). Kode javascript yang diberikan ke $where
operator dijalankan di server mongo dan tidak akan memiliki akses ke lingkungan terlampir ("ikatan konteks").
> 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
}
Selain itu sepertinya driver mongo asli node.js berperilaku berbeda dari shell karena tidak secara otomatis membuat serial fungsi js yang Anda berikan di objek kueri dan sebaliknya kemungkinan akan menghapus klausa sama sekali. Ini akan memberi Anda padanan timetables.find({})
yang akan mengembalikan semua dokumen dalam koleksi.