在日期时间字段上定向数据库搜索并从链接数据集中获取结果数据
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
所以基本上我在这里有两个问题:
- 如何 运行 比较链接 class 和
的日期
- 如何显示此 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")
希望对您有所帮助。
我对 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
所以基本上我在这里有两个问题:
- 如何 运行 比较链接 class 和 的日期
- 如何显示此 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")
希望对您有所帮助。