0

非常に複雑なクエリがあり、eval() 関数を使用して一部のデータを評価しています。

しかし、eval() 内で AND 演算子が適切に処理されていないようです。

例えば:

if(eval('#20:34 IN out[@class='attempts'].in.@rid AND \'b\' IN out[@class='attempts'].choice'), true, false) as attempt_b

その例では、@rid が#20:34AND であり、"choice" プロパティが 'b' であり、true に返されるデータのみを取得することを期待しています。

「out」フィールドには、SELECT クエリの $current.@rid があります。

これはサンプルデータです:

out ------  in  ---- choices
14:3 ---- 20:34 ------ b
14:4 ---- 20:34 ------ a
14:7 ---- 20:34 ------ c
14:8 ---- 20:34 ------ d

元:if(eval('#20:34 IN out[@class='attempts'].in.@rid AND \'" + choice + "\' IN out[@class='attempts'].choice'), true, false) as attempt_choice

1.)$current.@rid = #14:3 and choice is 'a'

Return Output: true
Expected output: false (since there is no #20:34 with a choice of "A" in current.@rid which is #14:3)

2.)$current.@rid = #14:3 and choice is 'b'

Return Output: true
Expected output: true

3.)$current.@rid = #14:3 and choice is 'c'

Return Output: true
Expected output: false (since there is no #20:34 with a choice of "c" in current.@rid which is #14:3)

4.)$current.@rid = #14:3 and choice is 'd'

 Return Output: true
 Expected output: false (since there is no #20:34 with a choice of "d" in current.@rid which is #14:3)`

クエリの問題なのか、orientdb の問題なのかはわかりません。誰かが私を私たちが達成したいことに導いてくれれば、それは大きな助けになるでしょう.

4

1 に答える 1

0

それは引用符の問題だと思います。「b」のエスケープは気にしましたが、残りは気にしませんでした。次のようなものを試してください:

if(eval("#20:34 IN out[@class='attempts'].in.@rid AND 'b' IN out[@class='attempts'].choice"), true, false) as attempt_b
于 2013-05-01T11:25:56.390 に答える