#pagination #facebook-fql #faunadb
#разбивка на страницы #facebook-fql #faunadb
Вопрос:
Я создал индекс в faunadb для сортировки по метке времени, чтобы сначала получить самые последние элементы, и я пытаюсь получить 100 элементов за раз. Моя проблема в том, что когда я ввожу параметр «после» из результата, я получаю те же результаты, что и первоначальный запрос.
Это индекс, который я создал:
CreateIndex({
name: "all_school_queries",
source: Collection('<school_queries_reversed>'),
values: values: [
{
field: ["ts", {reverse: true}]
},
{
field: ["ref"]
}
]
})
Вот как я запрашиваю базу данных:
Map(
Paginate(Match(Index("school_query_reverse")), {
after: [ Ref(Collection("collection_name") ,'collection ref from first query')],
}),
Lambda(
['ts',"ref"],
Get(Var("ref"))
)
)
и это первый результат:
{
before: [Ref(Collection("collection_name"), "275484304279077376")],
after: [
1598907150720000,
Ref(Collection("school_queries"), "12345"),
Ref(Collection("school_queries"), "12345")
],
}
Я использовал как временную метку для after, 1598907150720000
так и для ref, 12345
. Сначала я попробовал консоль, чтобы убедиться, что смогу получить правильный ответ, но после ввода любого результата из after я получаю тот же результат.
Комментарии:
1. Можете ли вы попробовать без параметра after, чтобы убедиться, что индекс выглядит правильно?
Ответ №1:
Я попытаюсь ответить на ваш вопрос (я разработчик adv в FaunaDB). Я должен сказать, что я совершенно сбит с толку вашим вопросом из-за синтаксиса, который, похоже, не имеет смысла для меня, поэтому я прошу прощения, если это не тот ответ, который вы ищете.
Вещи, которые меня смущают.
- Синтаксис индекса неверен, вы скопировали это где-нибудь или переписали вручную? Если вы его куда-то скопировали, мы можем отобразить его неправильно, поэтому дайте мне знать, если это так. Имя индекса не соответствует имени, которое вы используете, поэтому я предполагаю, что это опечатка.
- <school_queries_reversed>, обратный в названии коллекции, похоже, не имеет смысла для меня, поскольку обратный определен в индексе, а не в коллекции.
Впрочем, это не имеет значения, я попытался воспроизвести вашу проблему, поскольку я понятия не имею, как выглядят данные, я сохранил ее простой.
Индекс, который я использовал, выглядит следующим образом:
CreateIndex({
name: "all_school_queries",
source: Collection('school_queries'),
values: [
{
field: ["ts"],
reverse: true
},
{
field: ["ref"]
}
]
})
Если я затем запрошу этот индекс следующим образом:
Map(
Paginate(Match(Index("all_school_queries")), {size: 1}),
Lambda(
['ts',"ref"],
Get(Var("ref"))
)
)
Я получаю последний элемент, который я добавил первым (обратный индекс)
{
after: [
1599220462170000,
Ref(Collection("school_queries"), "275735235372515847"),
Ref(Collection("school_queries"), "275735235372515847")
],
data: [
{
ref: Ref(Collection("school_queries"), "275735244842205703"),
ts: 1599220471200000,
data: {
query: "bli"
}
}
]
}
и когда я использую возвращенный курсор after для получения следующей страницы (здесь я указал страницы только из одного элемента):
Map(
Paginate(Match(Index("all_school_queries")), {size: 1, after: [
1599220462170000,
Ref(Collection("school_queries"), "275735235372515847"),
Ref(Collection("school_queries"), "275735235372515847")
]}),
Lambda(
['ts',"ref"],
Get(Var("ref"))
)
)
Я получаю (как и ожидалось) другой элемент.
{
before: [
1599220462170000,
Ref(Collection("school_queries"), "275735235372515847"),
Ref(Collection("school_queries"), "275735235372515847")
],
data: [
{
ref: Ref(Collection("school_queries"), "275735235372515847"),
ts: 1599220462170000,
data: {
query: "bla"
}
}
]
}
У вас это не работает?
Ответ №2:
У меня была такая же проблема, и я создал сообщение на форуме о том, как с этим справиться.
https://forums .fauna.com/t/filter-by-timestamp-with-gql-resolver/3302
Я думаю, что большинство людей отсутствуют
paginated: true
в схеме gql илиMap(Var("page"), Lambda(["ts", "ref"], Get(Var("ref"))))
передать [«ts», «ref»] в лямбда-выражение после разбивки на страницы