2016-01-04 2 views
0

Я пытаюсь использовать оператор «$ where» внутри запроса MongoEngine с помощью execjs. Этот вопрос основывается на успешном ответе на запрос 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()') }) 

Благодарим Вас за мысли!

(постскриптум Я понимаю, что это может быть позаботятся переделка моей схемы, но много уже построен на вершине того, что мы уже разработали.)

ответ

0

Хорошо, я отвечу на свой вопрос. Вместо того, чтобы изменять схему или выяснять, как выполнить javascript, я назвал подмножество коллекции в объект и повторил ее с помощью Python. Это не лучший ответ, но это было лучше, чем изменение схемы или получение этого безобразного JS для выполнения.

Смежные вопросы