#[CLOSED] list limit
67 messages · Page 1 of 1 (latest)
You can up to 5000
Got this error
Yes
What should I do then?
You can offset the list
What do you mean?
👍
Thank you
[CLOSED] list limit
Hi @pine abyss if I call listDocuments without Query.limit, what is the default limit used? 100 or 5000. Can you share please the link to source code where we can find the process of applying queries
I just made some tests, the limit default is 25, and there is no maximun number to be used in limit() I can query 100K if I want, that IS GREAT cause I have some tables with a lot of records.
The only problem is "total" return a maximum of 5000 (so bad) cause it would be great if return r}eal total
Hey,
Here you can find the App limit https://github.com/appwrite/appwrite/blob/master/app/init.php#L87
You can change this file when you're on a self-hosting instance,
Check this: #1115191629733703730 message
Thanks, this is helpful.
Just to be clear, how could I query 10K rows if the limit is 5000? (I used postman)
You'll need to use cursor pagination
https://appwrite.io/docs/pagination#cursor-pagination
In which your getting value after the last ID Query.cursorAfter(lastId),
So you can do that
let docs = [];
let data = await databases.listDocuments(
'[DATABASE_ID]',
'[COLLECTION_ID]',
[
Query.limit(5000),
]
);
docs = [...data.documents];
while(true)
{
const lastId = data.documents[data.documents.length - 1].$id;
data = await databases.listDocuments(
'[DATABASE_ID]',
'[COLLECTION_ID]',
[
Query.limit(500),
Query.cursorAfter(lastId),
]
);
if(docs.total === 0) {
// No more.
break;
}
docs = [...data.documents,...docs];
}
console.log(docs);
This way you'll have all of the documents.
Thanks that is right, but I mean that i use postman with query[] = limit(10000) and it return that ammount
it returns 10K rows, I count the json response objects. Also i put limit() (without any number) to provoke an intentional error, this message I received:
{
"message": "Query not valid: Invalid limit: Value must be a valid range between 0 and 9,223,372,036,854,775,808",
"code": 400,
"type": "general_argument_invalid",
"version": "1.3.4"
}
Limit must have a number in it ad a parameter
Yes I undestand that, but you said limit can have up to 5000, but I used more, and the error message says 9,223,372,036,854,775,808
I'm confused, I just want to be sure what is the limit of limit
It's okay
Can you share the request in which you got more than 5
The result is:
{
"total": 5000,
"documents": [
... 6000 objects
]
I dont think appwrite should limit developers to get a max number of records, 9,223,372,036,854,775,808 is good xD
the bug is in total it should be 6000 in this request
It should always have a limit, although it should be customizable, but not having a limit server-sided supposes that someone with bad intentions could abuse of your appwrite instance (slowing it down and increasing costs)
If that's the limit and you managed to bypass it, that's a problem
@icy pecan Do you have rate limit enabled in your app
No it is the default self hosted installation
By default rate limiting seems to be enabled
Also are you doing the queries client sided? Did you have set any API keys apart from project ID?
I see
I'm calling the appwrite database api (Get Document List) with postman
Yeah, I'm agree
But when trying to get a list from a function (to make business logic or integration, like sync tables) sometimes fetch all table records is needed, for example, I will have a table with almost 10K records, so I will need to fetch them in the function, but for client sdk It is good the limit of 5000 (or even less)
I tried both, with client session, and with server api key
both responses are the same
And in both cases without an API key you're able to get unlimited documents?
yes
🤔 @elder depot Could you take a look into this? Shouldn't that be limited client sided without an API key?
So with server sdk the limit is not 5000?
I mean when using apikey
as of 1.3, we've removed the maximum limit
Whaaat 😅
but total is still capped at 5k
But isn't that going to allow abuse?
we plan to kill and block slow queries
but, when a query is considered slow? it will be a env var to config that?
maybe/probably?
I think instead of removing, it should be customizable, like all other abuse limits, in my case just to reduce them. Meanwhile I will make a fork, since I don't want anyone getting 5k documents with a single request 😅
sorry, did not understand you
i don't know that detail
oh, ok thanks
Are you agree that when calling "list documents " from functions there should not exist a limit or kills for slow queries? cause that is made by the developer so he must have care of what is he coding. On the contrary, the "client rest/sdk" requests should have the limit/kill
We want to protect the platform and prevent one project's slow query from affecting another project, so we plan to kill slow queries regardless of client-side or server-side