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

时间:2016-02-21 12:35:04

标签: orientdb

我对OrientDB很陌生并且遇到了一些问题让我连续几天: 我有两节课。 “PAGES”保存有关页面的信息,“CHECKS”包含有关这些页面上的检查的信息。 它们通过1> 1连接。 n linkset名为page2chck 看起来像这样

function foo () {
  console.log(this.a);
}

// Both object hold references to the foo function
var O = { foo : foo, a : 5 },
    O2 = { bar : foo, a : 1 };

O.foo(); // implicit `this` from O
O2.bar(); // implicit `this` from O2

var Z = { a : 23 };

O.foo.call(Z); // explicit `this` from Z

我创建了一个像这样的链接集

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      |
+-------------------------------+

现在我想检索2016-02-03之后没有检查的所有页面,我想显示它们被检查的最后日期和状态

我尝试的是:

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

但它返回一个空结果

然而,为了测试我跑的关系的完整性

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

正确返回“BlahBlah”

所以我试过

select Title from PAGES where page2chck.CH_PID=30

返回

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

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

  1. 如何在链接类的日期和
  2. 上运行比较
  3. 如何显示此课程的字段?

2 个答案:

答案 0 :(得分:0)

我认为我在查询中发现了其中一个问题

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    
----+------+---------+-------------------+------

答案 1 :(得分:0)

enter image description here

#include <string>
#include <iostream>

typedef std::basic_string<unsigned char> ustring;

inline ustring convert(const std::string& sys_enc) {
  return ustring( sys_enc.begin(), sys_enc.end() );
}

template< std::size_t N >
inline ustring convert(const char (&array)[N]) {
  return ustring( array, array+N );
}

inline ustring convert(const char* pstr) {
  return ustring( reinterpret_cast<const ustring::value_type*>(pstr) );
}

std::ostream& operator<<(std::ostream& os, const ustring& u)
{
    for(auto c : u)
      os << c;
    return os;
}

int main()
{
    ustring u1 = convert(std::string("hello"));
    std::cout << u1 << '\n';

    // -----------------------
    char chars[] = { 67, 43, 43 };
    ustring u2 = convert(chars);
    std::cout << u2 << '\n';

    // -----------------------
    ustring u3 = convert("hello");
    std::cout << u3 << '\n';
}

现在从控制台

enter image description here

来自Studio

enter image description here

您可以使用此查询

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

从控制台

enter image description here

来自Studio

enter image description here

如果要检索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")))

enter image description here

希望它有所帮助。

enter image description here