1

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 スキーマを作り直すことでこれを解決できるかもしれませんが、既に解決したものの上に多くのものが既に構築されています。)

4

1 に答える 1

0

さて、私は自分の質問に答えます。スキーマを変更したり、javascript を実行する方法を考えたりする代わりに、コレクションのサブセットをオブジェクトに呼び出し、Python を使用してそれを反復処理しました。これは最良の答えではありませんが、スキーマを変更したり、醜い JS を実行したりするよりはましでした。

于 2016-01-06T20:34:35.927 に答える