在 Mongoengine 中使用 execjs 和 $where

Using execjs and $where inside of Mongoengine

我正在尝试使用 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()') })

谢谢你的想法!

(p.s。我意识到这可以通过重新设计我的架构来解决,但是很多已经建立在我们已经制定的之上。)

好的,我会回答我自己的问题。我没有更改模式或弄清楚如何执行 javascript,而是将集合的一个子集调用到一个对象中,并使用 Python 遍历它。这不是最好的答案,但比更改模式或让丑陋的 JS 执行要好。