Gremlin:返回结果计数和结果

时间:2016-05-23 00:17:47

标签: titan gremlin

我尝试使用range()在我的应用中为分页返回部分结果集。作为响应的一部分,我还需要返回整体结果中的记录总数。回复应如下:

{
  postcount: 239,
  posts: [
    {
      postID: 1,
      postTitle:'First post'
    },
    {
      postID: 2,
      postTitle:'Second post'
    },
    {
      postID: 3,
      postTitle:'Third post'
    }
  ]
}

我一直试图做这样的工作而没有运气:

g.V().hasLabel('post').as('postcount','posts').select('postcount','posts').by(__.count()).by(__.range(0,2).valueMap())

为每个项目添加postcount = 1属性。我该如何调整呢?

3 个答案:

答案 0 :(得分:1)

您可以使用union步骤来实现您想要的目标。例如:

 g.V().hasLabel("post").union(
               __.select("postcount").by(__.count()), // postcount property
               __.range(0,2).valueMap() // your range
            ) //end of union

有关详情,请查看docs

答案 1 :(得分:1)

您可以将其分解为两个查询:

pCount = g.V().hasLabel("post").count().next();
pList = g.V().hasLabel("post").range(0,2).valueMap().toList();
map = ["postcount": pCount, "posts": pList]

答案 2 :(得分:1)

根据Daniel Kuppitz的Gremlin-Users list找到答案:

  

在3.2.0中:

> g.V().hasLabel("person").fold().project("users","userCount").by(range(local,
> 0, 2)).by(count(local))
  

在3.2.0之前:

g.V().hasLabel("person").fold().as("users","userCount").select("users","userCount").by(range(local,
> 0, 2)).by(count(local))