Orientdb 在datetime字段上定向DB搜索,并从链接的数据集中获取结果数据

Orientdb 在datetime字段上定向DB搜索,并从链接的数据集中获取结果数据,orientdb,Orientdb,我是OrientDB的新手,遇到了一些麻烦,这几天一直困扰着我: 我有两节课。页面包含关于页面的信息,检查包含关于这些页面上的检查的信息。 它们由一个名为page2chck的1>n链接集连接 看起来像这样 Class PAGES +----+---------+---------------------------------+ | Id | Title | Url | +----+---------------------------

我是OrientDB的新手,遇到了一些麻烦,这几天一直困扰着我: 我有两节课。页面包含关于页面的信息,检查包含关于这些页面上的检查的信息。 它们由一个名为page2chck的1>n链接集连接 看起来像这样

Class PAGES
+----+---------+---------------------------------+
| Id | Title   | Url                             |
+----+-------------------------------------------+
| 30 | Blahbla | http://www.test.com/test.html   |
+----+-------------------------------------------+
| 40 | sometxt | http://www.foo.org/dummy.html   |
+----+-------------------------------------------+

Class CHECKS
+---------------------+---------+
| Lastcheck           | Status  |
+-------------------------------+
| 2016-02-01 23:58:12 | OK      |
+-------------------------------+
| 2016-02-02 22:04:24 | OK      |
+-------------------------------+
| 2016-02-02 23:57:55 | ERR     |
+-------------------------------+
| 2016-02-01 23:59:01 | OK      |
+-------------------------------+
CREATE LINK page2chck TYPE LINKSET FROM CHECKS.CH_PID to PAGES.Id INVERSE
我创建了一个这样的链接集

Class PAGES
+----+---------+---------------------------------+
| Id | Title   | Url                             |
+----+-------------------------------------------+
| 30 | Blahbla | http://www.test.com/test.html   |
+----+-------------------------------------------+
| 40 | sometxt | http://www.foo.org/dummy.html   |
+----+-------------------------------------------+

Class CHECKS
+---------------------+---------+
| Lastcheck           | Status  |
+-------------------------------+
| 2016-02-01 23:58:12 | OK      |
+-------------------------------+
| 2016-02-02 22:04:24 | OK      |
+-------------------------------+
| 2016-02-02 23:57:55 | ERR     |
+-------------------------------+
| 2016-02-01 23:59:01 | OK      |
+-------------------------------+
CREATE LINK page2chck TYPE LINKSET FROM CHECKS.CH_PID to PAGES.Id INVERSE
现在,我想检索2016-02-03之后没有检查的所有页面,并显示检查的最后日期和状态

我尝试的是:

select Title, page2chck.Lastcheck, page2chck.Status from PAGES 
where date.asLong(page2chck.Lastcheck) < 1454540400
正确返回BlahBlah

所以我试过了

page2chck.Lastcheck, page2chck.Status, Title from PAGES 
where page2chck.CH_PID=30
返回的

#   |@CLASS|page2chck|page2chck|Title                          
----+------+---------+---------+---------------------------------
0   |null  |[441]    |[441]    |BlahBlah               
基本上我这里有两个问题:

如何对链接类的日期进行比较 如何显示此类的字段?
我想我在你的询问中发现了一个问题

select Title, page2chck.Lastcheck, page2chck.Status from PAGES where date.asLong(page2chck.Lastcheck) < 1454540400
顺便说一句,您可以创建链接列表,而不需要反向链接

CREATE LINK chck2page TYPE LINKSET FROM CHECKS.CH_PID to PAGES.Id
像这样询问:

orientdb {db=pages_checks}> select chck2page.title, lastcheck, status from CHECKS where lastcheck < DATE("2016-02-01 23:59:10")


----+------+---------+-------------------+------
#   |@CLASS|chck2page|lastcheck          |status
----+------+---------+-------------------+------
0   |null  |blablabla|2016-02-01 23:58:12|OK    
1   |null  |foo      |2016-02-01 23:59:01|OK    
----+------+---------+-------------------+------

我想我在你的询问中发现了一个问题

select Title, page2chck.Lastcheck, page2chck.Status from PAGES where date.asLong(page2chck.Lastcheck) < 1454540400
顺便说一句,您可以创建链接列表,而不需要反向链接

CREATE LINK chck2page TYPE LINKSET FROM CHECKS.CH_PID to PAGES.Id
像这样询问:

orientdb {db=pages_checks}> select chck2page.title, lastcheck, status from CHECKS where lastcheck < DATE("2016-02-01 23:59:10")


----+------+---------+-------------------+------
#   |@CLASS|chck2page|lastcheck          |status
----+------+---------+-------------------+------
0   |null  |blablabla|2016-02-01 23:58:12|OK    
1   |null  |foo      |2016-02-01 23:59:01|OK    
----+------+---------+-------------------+------
现在从控制台

从工作室

您可以使用此查询

SELECT Title, $checks[0].Lastcheck as Lastcheck , $checks[0].Status as Status FROM PAGES 
let $a = (select EXPAND(page2chck) from $parent.$current),
$checks= ( select Lastcheck, Status from $a where Lastcheck in 
( select max(Lastcheck) from $a where Lastcheck < DATE("2016-02-03 00:00:00")))
select from (SELECT Title, $checks[0].Lastcheck as Lastcheck , $checks[0].Status as Status FROM PAGES 
let $a = ( select EXPAND(page2chck) from $parent.$current),
$checks= ( select Lastcheck, Status from $a where Lastcheck in ( select max(Lastcheck) from $a))
) where Lastcheck < DATE("2016-02-03 00:00:00")
从控制台

从工作室

如果要检索2016-02-03之后未进行检查的所有页面 您可以使用此查询

SELECT Title, $checks[0].Lastcheck as Lastcheck , $checks[0].Status as Status FROM PAGES 
let $a = (select EXPAND(page2chck) from $parent.$current),
$checks= ( select Lastcheck, Status from $a where Lastcheck in 
( select max(Lastcheck) from $a where Lastcheck < DATE("2016-02-03 00:00:00")))
select from (SELECT Title, $checks[0].Lastcheck as Lastcheck , $checks[0].Status as Status FROM PAGES 
let $a = ( select EXPAND(page2chck) from $parent.$current),
$checks= ( select Lastcheck, Status from $a where Lastcheck in ( select max(Lastcheck) from $a))
) where Lastcheck < DATE("2016-02-03 00:00:00")
希望能有帮助

现在从控制台

从工作室

您可以使用此查询

SELECT Title, $checks[0].Lastcheck as Lastcheck , $checks[0].Status as Status FROM PAGES 
let $a = (select EXPAND(page2chck) from $parent.$current),
$checks= ( select Lastcheck, Status from $a where Lastcheck in 
( select max(Lastcheck) from $a where Lastcheck < DATE("2016-02-03 00:00:00")))
select from (SELECT Title, $checks[0].Lastcheck as Lastcheck , $checks[0].Status as Status FROM PAGES 
let $a = ( select EXPAND(page2chck) from $parent.$current),
$checks= ( select Lastcheck, Status from $a where Lastcheck in ( select max(Lastcheck) from $a))
) where Lastcheck < DATE("2016-02-03 00:00:00")
从控制台

从工作室

如果要检索2016-02-03之后未进行检查的所有页面 您可以使用此查询

SELECT Title, $checks[0].Lastcheck as Lastcheck , $checks[0].Status as Status FROM PAGES 
let $a = (select EXPAND(page2chck) from $parent.$current),
$checks= ( select Lastcheck, Status from $a where Lastcheck in 
( select max(Lastcheck) from $a where Lastcheck < DATE("2016-02-03 00:00:00")))
select from (SELECT Title, $checks[0].Lastcheck as Lastcheck , $checks[0].Status as Status FROM PAGES 
let $a = ( select EXPAND(page2chck) from $parent.$current),
$checks= ( select Lastcheck, Status from $a where Lastcheck in ( select max(Lastcheck) from $a))
) where Lastcheck < DATE("2016-02-03 00:00:00")
希望能有帮助


嗨,为什么不使用边而不是链接集呢?因为我认为这没有意义,因为我们每天都在运行检查,所以每天我们都必须创建很多顶点和边。有了链接集,DB会处理关系本身,我想这会加快插入速度。但也许我错了,因为我是OrientDB的新手。那么使用边的查询会是什么样子呢?嗨,为什么不使用边而不是链接集呢?因为我认为这没有意义,因为我们每天都运行检查,所以每天我们都必须创建很多顶点和边。有了链接集,DB会处理关系本身,我想这会加快插入速度。但也许我错了,因为我是OrientDB的新手。那么使用边的查询会是什么样子呢?是的,就是这样。时间戳到底出了什么问题仍然很神秘,但这完全解决了问题。谢谢!是的,就是这个。时间戳到底出了什么问题仍然很神秘,但这完全解决了问题。谢谢!