同时获取过滤的顶点和未过滤的顶点计数时遇到问题

时间:2019-02-14 11:59:47

标签: azure-cosmosdb gremlin azure-cosmosdb-gremlinapi

我正在尝试返回与模式匹配的有限个顶点,以及与该模式匹配的顶点的总数( non-limited )。 / p>

g.V()
  .hasLabel("PersonPublic")
  .has('partitionKey', "Q2r1NaG6KWdScX4RaeZs")
  .has('docId', "Q2r1NaG6KWdScX4RaeZs")
  .out("CONTACT_LIST")
  .out("SUBSCRIBER")
  .dedup()
  .order()
    .by("identifier")
    .by("docId")
  .fold()
  .project('people','total')
    .by(
      unfold()
      .has('docId', gt("23")),
      .limit(2)
      .project('type','id')
        .by(label())
        .by(values('docId'))
    )
    .by(unfold().count())

简而言之,我要找到一个人,找到该人的所有联系人列表,找到这些联系人列表的所有订户,对订户进行重复数据删除,订购订户,暂停在那里收集所有内容,然后进行投影结果的形式

{
  people: [{type: string, id: string}],
  total: number,
}
  • 展开投影的“人物”部分,将其过滤以仅包含“ docId”大于“ 23”(限制为2)的结果,然后再次投影。

  • 投影的“总计”部分已展开(无限制)并计数。

我的目标是允许在遍历某个模式的同时仍检索与该模式相关联的顶点总数。

不幸的是,在cosmosdb上,此查询不起作用。结果格式为

{
  people: {type: string, id: string},
  total: number,
}

仅返回第一人称结果(而不是数组)。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您需要再次fold()投影值,否则,它将始终被修剪为第一个。另外,对于total,您不需要unfold(),那只是浪费资源。

g.V()
  .hasLabel("PersonPublic")
  .has('partitionKey', "Q2r1NaG6KWdScX4RaeZs")
  .has('docId', "Q2r1NaG6KWdScX4RaeZs")
  .out("CONTACT_LIST")
  .out("SUBSCRIBER")
  .dedup()
  .order()
    .by("identifier")
    .by("docId")
  .fold()
  .project('people','total')
    .by(
      unfold()
      .has('docId', gt("23"))
      .limit(2)
      .project('type','id')
        .by(label)
        .by('docId')
      .fold()
    )
    .by(count(local))