astro
astro

Reputation: 243

Firestore get documents where value not in array?

Is there a way to get all documents which array field does not contain one or more values, now there is "array-contains" but is there something like "array-not-contains"?

Upvotes: 22

Views: 13812

Answers (3)

gustavodacrvi
gustavodacrvi

Reputation: 325

Considering that your collection will have a low number of documents, you could store all of their ids in another document using an onCreate cloud function trigger, download this document from the client and do the filtering client-side. You could also do all of this inside a cloud function if you're worried about performance.

You'll have 1 extra read but that's no big deal, each document can have up to 1 MB of storage and that's a lot so you shouldn't be worried about it too much, you could also divide those ids into different documents and merge them on the client/cloud function if they get too big.

This works very well for small sets of data, but if you're expecting millions of documents, then there isn't much you can do.

Upvotes: 0

Doug Stevenson
Doug Stevenson

Reputation: 317322

You can only query Firestore based on indexes, so that queries all scale up to search billions of documents without performance problems.

Indexes work by recording values that exist in your data set. An index can't possibly be efficient if it tracks things that don't exist. This is because the universe of non-existant values compared to your data set is extremely large and can't be indexed as such. Querying for non-existence of some value would require a scan of all your documents, and that doesn't scale.

Upvotes: 13

chris
chris

Reputation: 184

I don't think that is possible at the moment. I would try looking at this blog post for reference.

better arrays in cloud firestore

You might need to convert your array to an object so that you can query by (property === false)Convert array to object

Upvotes: 5

Related Questions