在Mongoengine中使用execjs和$ where

时间:2016-01-04 22:36:13

标签: mongodb python-2.7 mongoengine execjs

我正在尝试使用" $ where"使用execjs的MongoEngine查询中的operator。这个问题来自对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。我意识到这可能是通过重新设计我的架构来处理的,但是已经在我们已经解决的问题之上构建了很多。)

1 个答案:

答案 0 :(得分:0)

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