我的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"
}
]
}
如何在整个列表中查询,例如。如果我想查找包含“ignore”类型的测试用例的所有文档?
我尝试了以下查询
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')
答案 0 :(得分:7)
我知道这是一个老问题,但我遇到了同样的问题,只是在这里找到了答案: https://www.mail-archive.com/orient-database@googlegroups.com/msg00662.html
以下内容应该有效。它在我非常类似的用例中。
select from testresult where 'ignore' in testcases.type
答案 1 :(得分:1)
我有类似的问题,最终得到:
select * from testresult
let $tmp = (select from
(select expand(testcases) from testresult )
where
value.type = 'ignore')
where
testcases in $tmp.value
这将为您提供包含至少一个类型为ignore的测试用例的所有testresult文档。此查询适用于嵌入式列表。请注意,OrientDB> = 1.4.0中可以使用扩展功能。
内部查询:
select from (select expand(testcases) from testresult) where value.type='ignore'
仅选择type ='ignore'的不同测试用例。结果是测试用例。要让整个文档与那些测试用例和每个文档中包含的测试用例($ tmp.value中的测试用例)匹配。
我不知道是否有更简单的方法来查询嵌入列表......
答案 2 :(得分:0)
尝试
select from testresult where testcases traverse ( type = 'ignore' )
检查遍历运算符(https://groups.google.com/forum/?fromgroups#!topic/orient-database/zoBGmIg85o4)以了解如何使用fetchplan或在“where”之后放置any()而不是testcases。
例如,我们有一个名为Country的类,它有一个带有一些isoCodes的embeddedlist属性。如果我们尝试以下查询:
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"
}]
}
]
}
希望它有所帮助!!
的问候。