nodejsの「$where」句で渡された関数を使用してデータベースにクエリを実行すると、常にデータベース内のすべてのドキュメントが返されます。
たとえば、私がする場合
var stream = timetables.find({$where: function() { return false; }}).stream();
それは私にすべての文書を返します。代わりに、私がそうするなら
var stream = timetables.find({$where: 'function() { return false; }'}).stream();
関数は実際に実行され、このコードはドキュメントを返しません。
問題は、関数を文字列に変換すると、コンテキストのbindindsが削除され、より複雑なクエリに必要になることです。例えば:
var n = 1;
var f = function() { return this.number == n; }
var stream = timetables.find({$where: f.toString()}).stream();
// error: n is not defined
これは正常な動作ですか?どうすれば問題を解決できますか?英語が下手で失礼します!