Проблема с одновременным получением отфильтрованных вершин и количества неотфильтрованных вершин

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

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,
}

И возвращается только результат от первого лица (а не массив).

Любая помощь будет принята с благодарностью!


person John    schedule 14.02.2019    source источник


Ответы (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))
person Daniel Kuppitz    schedule 14.02.2019
comment
Спасибо!!! Я потратил час или два, пробуя разные комбинации запросов в поисках этого! Я считаю, что мне все еще нужно использовать .by(unfold().count(local)) в конце, иначе total: 1 всегда. - person John; 15.02.2019