Проблема одновременной выборки отфильтрованных вершин и количества нефильтрованных вершин - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь вернуть ограниченное количество вершин, соответствующих шаблону, а также общее ( неограниченное ) количество вершин, соответствующих этому шаблону.

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 голосов
/ 14 февраля 2019

Вам нужно 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))
...