execjs を使用して、MongoEngine クエリ内で「$where」演算子を使用しようとしています。この質問は、次の MongoDB クエリに対する成功した回答から作成されます: MongoDB find in collection with unknown key。MongoDB 内で関数をテストしたところ、うまくいきました。MongoEngine に移植するだけです。
次の実行時に受け取るエラーは次のとおりです。
pymongo.errors.OperationFailure: database error: Can't canonicalize query: BadValue $where got bad type
コードは次のとおりです。
my_js_function = 'function mongo_query(){ for( var c in this ){ if( c == "machines" ){ for(var i in this[c]){ for( var j in this[c][i]){ if(j == "process" && this[c][i][j] == "543ef1f380da5b0c476373c7"){ return true; } } } }; } return false; }'
compiled_function = execjs.compile(my_js_function)
次に、MongoEngine クエリ:
companies = Company._get_collection().find( {"$where" : compiled_function.eval('mongo_query()') })
ご感想ありがとうございます!
(ps スキーマを作り直すことでこれを解決できるかもしれませんが、既に解決したものの上に多くのものが既に構築されています。)