我对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
所以基本上我有两个问题:
答案 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)
#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';
}
现在从控制台
来自Studio
您可以使用此查询
CREATE LINK page2chck TYPE LINKSET FROM CHECKS.CH_PID to PAGES.Id INVERSE
从控制台
来自Studio
如果要检索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")))
希望它有所帮助。