如何使用query.v1获取分页数据的总数

时间:2014-02-21 01:04:23

标签: versionone

使用query.v1端点进行分页时,如何获得结果总数?

其余-1.v1 /数据

这样的请求:

/rest-1.v1/Data/Member?page=2,0

返回以下内容:

<Assets total="4" pageSize="2" pageStart="0">...

请注意属性total="4"

query.v1

而像这样的查询:

{
  "from": "Story",
  "page":
  {
    "start":0,
    "size":2
  }
}

返回以下内容:

[
    [
        {
            "_oid": "Story:1007"
        },
        {
            "_oid": "Story:1015"
        }
    ]
]

请注意,没有任何总计数。

我可以在select语句中提供一些特殊参数来包含计数吗? (与@Count端点rest-1.v1/Data类似?)

3 个答案:

答案 0 :(得分:1)

不幸的是,在使用query.v1端点时,默认情况下不存在此信息,因为它与rest-1.v1一样。但是这里有一个可以使用的解决方法,使用两种查询方法。

[
    {
        "from": "Scope",
        "select":["Workitems.@Count"],
        "filter":["ID='Scope:0'","Workitems.AssetType='Story'"]
    },
    {
        "from": "Story",
        "select": ["Name"],
        "filter":["Scope='Scope:0'"],
        "page":
        {
            "start":0,
            "size":2
        }
    }
]

答案 1 :(得分:1)

经过进一步调查,以下是使用两个查询计算结果的解决方案:

[
    {
        "from": "Scope",
        "select":["Workitems:Story[AssetState!='Dead'].@Count"],
        "filter":["ID='Scope:0'"]
    },
    {
        "from": "Story",
        "select": ["Name"],
        "filter":["Scope='Scope:0'","AssetState!='Dead'"],
        "page":
            {
                "start":0,
                "size":200
            }
    }
]

关于第4行的一些澄清:

"select":["Workitems:Story[AssetState!='Dead'].@Count"]

&#34;工作项目&#34;我们正在将该集合下载到&#34; Story&#34;,然后过滤&#34; AssetState&#34;不是&#34;死亡&#34;获得活跃的故事,最后计算工作项目。

在这里您可以找到一些参考文献和其他文档:

VersionOne Grammars

答案 2 :(得分:0)

@LaureanoRemedi回答了这个问题,但我想扩展它以适应过滤Workitems而不仅仅是Scope

比如说,我们想要计算属于Story的任务数量。我们可以使用向下转换和过滤器语法按Task属性过滤属于该Scope的{​​{1}}:

Parent

有了这个,我们可以建立一个多查询请求:

"Workitems:Task[Parent='Story:1007'].@Count"

返回计数和结果:

[{
  "from": "Scope",
  "where": {"ID":"Scope:1000"},
  "select": [ "Workitems:Task[Parent='Story:1007'].@Count" ]
},
{
   "from": "Task",
   "where": { "Parent": "Story:1007" }
}]