【问题标题】:min() of Date properties in JanusGraphJanusGraph 中日期属性的 min()
【发布时间】:2017-09-05 07:53:50
【问题描述】:

在 JanusGraph 中,我想获取一些 Date 属性的 min()。

由于 min() 和 max() 都只支持 Number 类型,所以我使用 map{it.get().getTime()}。但是结果很奇怪。

怎么做?

  • JanusGraph 版本:github master(大约 2 周前构建)
  • Gremlin 版本:3.2.6

架构定义

gremlin> mgmt = graph.openManagement()
==>org.janusgraph.graphdb.database.management.ManagementSystem@496a8a94

gremlin> person = mgmt.makeVertexLabel('Person').make()
==>Person

gremlin> t_created = mgmt.makePropertyKey('t_created').dataType(Date.class).cardinality(SINGLE).make()
==>t_created

gremlin> t_modified = mgmt.makePropertyKey('t_modified').dataType(Date.class).cardinality(SINGLE).make()
==>t_modified

gremlin> mgmt.buildIndex('i_t_created', Vertex.class).addKey(t_created).buildMixedIndex('search')
==>i_t_created

gremlin> mgmt.buildIndex('i_t_modified', Vertex.class).addKey(t_modified).buildMixedIndex('search')
==>i_t_modified

gremlin> mgmt.commit()
==>null

我的 gremlin 控制台代码

gremlin> person = g.addV('Person').property('t_created', new Date()).property('t_modified', new Date()).next()
==>v[16488]

gremlin> g.tx().commit()
==>null

gremlin> g.V(person).properties()
==>vp[t_created->Tue Sep 05 07:40:16 ]
==>vp[t_modified->Tue Sep 05 07:40:16 ]

gremlin> g.V(person).values('t_created', 't_modified')
==>Tue Sep 05 07:40:16 UTC 2017
==>Tue Sep 05 07:40:16 UTC 2017

gremlin> g.V(person).values('t_created', 't_modified').min()
java.util.Date cannot be cast to java.lang.Number
Type ':help' or ':h' for help.
Display stack trace? [yN]

gremlin> g.V(person).values('t_created', 't_modified').map{it.get().getTime()}
==>1504597216099
==>1504597216099

// max() is OK
gremlin> g.V(person).values('t_created', 't_modified').map{it.get().getTime()}.max()
==>1504597216099

// Why min() is 2147483647 ?
gremlin> g.V(person).values('t_created', 't_modified').map{it.get().getTime()}.min()
==>2147483647

【问题讨论】:

    标签: gremlin tinkerpop tinkerpop3 janusgraph


    【解决方案1】:

    我不知道您为什么会得到 2147483647,但您可以尝试以下其他方法:

    gremlin> g.addV().property("foo", new Date())
    ==>v[0]
    gremlin> g.addV().property("foo", new Date())
    ==>v[2]
    gremlin> g.V().values("foo")
    ==>Tue Sep 05 07:02:15 MST 2017
    ==>Tue Sep 05 07:02:18 MST 2017
    gremlin> g.V().values("foo").order().by().limit(1)     // min()
    ==>Tue Sep 05 07:02:15 MST 2017
    gremlin> g.V().values("foo").order().by(decr).limit(1) // max()
    ==>Tue Sep 05 07:02:18 MST 2017
    

    这种方法的好处是它不需要 lambda 步骤。

    【讨论】:

    • 谢谢!有用。我没有注意到 order()。 2147483647 似乎是最大 Int。但我不知道原因。
    猜你喜欢
    • 2020-12-20
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 2023-02-21
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    相关资源
    最近更新 更多