在日期时间字段上定向数据库搜索并从链接数据集中获取结果数据

orient DB search on datetime field and get result data from linked dataset

我对 OrientDB 还很陌生,现在遇到了一些困扰我好几天的问题: 我有两个 classes。 "PAGES" 包含有关页面的信息,"CHECKS" 包含有关检查这些页面的信息。 它们通过称为 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

现在我想检索所有在 2016 年 2 月 3 日之后没有检查的页面,并且我想显示检查的最后日期和状态

我试过的是:

select Title, page2chck.Lastcheck, page2chck.Status from PAGES 
where date.asLong(page2chck.Lastcheck) < 1454540400

但它 returns 一个空结果

但是,为了测试关系的完整性,我 运行

select Title from PAGES where page2chck.CH_PID=30

哪个正确 returns "BlahBlah"

所以我尝试了

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

返回

#   |@CLASS|page2chck|page2chck|Title                          
----+------+---------+---------+---------------------------------
0   |null  |[441]    |[441]    |BlahBlah               

所以基本上我在这里有两个问题:

  1. 如何 运行 比较链接 class 和
  2. 的日期
  3. 如何显示此 class 的字段?

我想我发现了您查询中的一个问题

select Title, page2chck.Lastcheck, page2chck.Status from PAGES where date.asLong(page2chck.Lastcheck) < 1454540400

1454540400 表示 1970-01-17 21:02:20,可由

select DATE(1454540400)                        

----+------+-------------------
#   |@CLASS|DATE               
----+------+-------------------
0   |null  |1970-01-17 21:02:20
----+------+-------------------

顺便说一句,您可以创建没有 INVERSE

的链接列表
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    
----+------+---------+-------------------+------

CREATE LINK page2chck TYPE LINKSET FROM CHECKS.CH_PID to PAGES.Id INVERSE

现在从控制台

来自工作室

您可以使用这个查询

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 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")

希望对您有所帮助。