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

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

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 ответ

Решение

Вам нужно 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))
Другие вопросы по тегам