Проблема одновременной выборки отфильтрованных вершин и количества нефильтрованных вершин
Я пытаюсь вернуть ограниченное количество вершин, соответствующих шаблону, а также общее (не ограниченное) количество вершин, соответствующих этому шаблону.
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))