我正在尝试使用 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 我意识到这可以通过修改我的模式来解决,但是在我们已经制定的基础上已经建立了很多东西。)