9

OrientDBデータベース(バージョン1.0.1)に、次のような構造のドキュメントがあります。

{
    "timestamp": "...",
    "duration": 665,
    "testcases": [
        {
            "testName": "test01",
            "type": "ignore",
            "filename": "tests/test1.js"
        },
        {
            "iterations": 1,
            "runningTime": 45,
            "testName": "test02",
            "type": "pass",
            "filename": "tests/test1.js"
        },
        ...
        {
            "testName": "test05",
            "type": "ignore",
            "filename": "tests/test1.js"
        }
    ]
}

リスト全体をクエリするにはどうすればよいですか。「無視」タイプのテストケースを含むすべてのドキュメントを検索したい場合はどうすればよいですか?

私は次のクエリを試みました

select from testresult where testcases['type'] = 'ignore'

しかし、これは結果になりNumberFormatExceptionます。

select from testresult where testcases[0]['type'] = 'ignore'

動作しますが、明らかに各ドキュメントの最初のリスト要素のみを調べます。

select from testresult where testcases contains(type = 'ignore')

結果は提供されませんが、クエリは有効として受け入れられます。

更新: テストケースが埋め込みリストではなく個別のドキュメントとして保存されている場合、次のクエリは意図したとおりに機能します。

select from testresult where testcases contains (type = 'ignore')
4

3 に答える 3

8

私はそれが古い質問であることを知っていますが、私は同じ問題を抱えていて、ここで答えに固執しました: https ://www.mail-archive.com/orient-database@googlegroups.com/msg00662.html

以下が機能するはずです。これは、私の非常によく似たユースケースで行われます。

select from testresult where 'ignore' in testcases.type
于 2015-02-05T04:12:15.657 に答える
1

私は同様の問題を抱えており、最終的に:

select * from testresult 
  let $tmp = (select from 
    (select expand(testcases) from testresult ) 
  where 
    value.type = 'ignore') 
where 
  testcases in $tmp.value

これにより、タイプが無視されるテストケースを少なくとも1つ含むすべてのテスト結果ドキュメントが提供されます。このクエリは、埋め込みリストで機能します。拡張機能がOrientDB>=1.4.0で使用可能であることに注意してください。

内部クエリ:

select from (select expand(testcases) from testresult) where value.type='ignore'

type='ignore'の異なるテストケースのみを選択します。結果はテストケースです。ドキュメント全体を作成するために、これらのテストケースを各ドキュメントに含まれているテストケース($ tmp.valueのテストケース)と照合します。

埋め込まれたリストをクエリするもっと簡単な方法があるかどうかわかりません...

于 2013-10-08T10:26:31.520 に答える
0

試す

select from testresult where testcases traverse ( type = 'ignore' )

トラバース演算子(https://groups.google.com/forum/?fromgroups#!topic/orient-database/zoBGmIg85o4)をチェックして、fetchplanの使用方法を確認するか、「where」の直後にテストケースの代わりにany()を配置します。

たとえば、いくつかのisoCodeを含むembeddedlistプロパティを持つCountryというクラスがあります。次のクエリを実行しようとすると:

select name,description,isoCodes,status from Country where isoCodes traverse ( value = 'GB' OR value = 'IT' )

Orientdb Restインターフェースは以下を提供します:

{
  "result": [{
      "@type": "d", "@version": 0, 
"name": "Italy", 
  "isoCodes": [
    {
      "@type": "d", "@version": 0, 
    "code": "iso3166-A2", 
    "value": "IT"
      }, 
    {
      "@type": "d", "@version": 0, 
    "code": "iso3166-A3", 
    "value": "ITA"
      }], 
  "status": [
    {
      "@type": "d", "@version": 0, 
    "status": "1", 
    "startingDate": "2012-04-24"
      }]
    }, {
      "@type": "d", "@version": 0, 
"name": "United Kingdom", 
  "isoCodes": [
    {
      "@type": "d", "@version": 0, 
    "code": "iso3166-A2", 
    "value": "GB"
      }, 
    {
      "@type": "d", "@version": 0, 
    "code": "iso3166-A3", 
    "value": "GBR"
      }], 
  "status": [
    {
      "@type": "d", "@version": 0, 
    "status": "1", 
    "startingDate": "2012-04-24"
      }]
    }
  ]
}

それが役に立てば幸い!!。

よろしく。

于 2012-07-12T11:27:21.967 に答える