firestore-query-collection
A “firestore-query-collection” tool allow to query collections in Firestore.
About
The firestore-query-collection
tool allows you to query Firestore collections with filters, ordering, and limit capabilities.
Configuration
To use this tool, you need to configure it in your YAML configuration file:
sources: my-firestore: kind: firestore project: my-gcp-project database: "(default)" tools: query_collection: kind: firestore-query-collection source: my-firestore description: Query Firestore collections with advanced filtering
Parameters
parameters | type | required | default | description |
---|---|---|---|---|
collectionPath | string | true | - | The Firestore Rules source code to validate |
filters | array | false | - | Array of filter objects (as JSON strings) to apply to the query |
orderBy | string | false | - | JSON string specifying field and direction to order results |
limit | integer | false | 100 | Maximum number of documents to return |
analyzeQuery | boolean | false | false | If true, returns query explain metrics including execution statistics |
Filter Format
Each filter in the filters
array should be a JSON string with the following structure:
{ "field": "fieldName", "op": "operator", "value": "compareValue" }
Supported operators:
<
- Less than<=
- Less than or equal to>
- Greater than>=
- Greater than or equal to==
- Equal to!=
- Not equal toarray-contains
- Array contains a specific valuearray-contains-any
- Array contains any of the specified valuesin
- Field value is in the specified arraynot-in
- Field value is not in the specified array
Value types supported:
- String:
"value": "text"
- Number:
"value": 123
or"value": 45.67
- Boolean:
"value": true
or"value": false
- Array:
"value": ["item1", "item2"]
(forin
,not-in
,array-contains-any
operators)
OrderBy Format
The orderBy
parameter should be a JSON string with the following structure:
{ "field": "fieldName", "direction": "ASCENDING" }
Direction values:
ASCENDING
DESCENDING
Example Usage
Query with filters
{ "collectionPath": "users", "filters": [ "{\"field\": \"age\", \"op\": \">\", \"value\": 18}", "{\"field\": \"status\", \"op\": \"==\", \"value\": \"active\"}" ], "orderBy": "{\"field\": \"createdAt\", \"direction\": \"DESCENDING\"}", "limit": 50 }
Query with array contains filter
{ "collectionPath": "products", "filters": [ "{\"field\": \"categories\", \"op\": \"array-contains\", \"value\": \"electronics\"}", "{\"field\": \"price\", \"op\": \"<\", \"value\": 1000}" ], "orderBy": "{\"field\": \"price\", \"direction\": \"ASCENDING\"}", "limit": 20 }
Query with IN operator
{ "collectionPath": "orders", "filters": [ "{\"field\": \"status\", \"op\": \"in\", \"value\": [\"pending\", \"processing\"]}" ], "limit": 100 }
Query with explain metrics
{ "collectionPath": "users", "filters": [ "{\"field\": \"age\", \"op\": \">=\", \"value\": 21}", "{\"field\": \"active\", \"op\": \"==\", \"value\": true}" ], "orderBy": "{\"field\": \"lastLogin\", \"direction\": \"DESCENDING\"}", "limit": 25, "analyzeQuery": true }
Response Format
Standard Response (analyzeQuery = false)
The tool returns an array of documents, where each document includes:
{ "id": "documentId", "path": "collection/documentId", "data": { // Document fields }, "createTime": "2025-01-07T12:00:00Z", "updateTime": "2025-01-07T12:00:00Z", "readTime": "2025-01-07T12:00:00Z" }
Response with Query Analysis (analyzeQuery = true)
When analyzeQuery
is set to true, the tool returns a single object containing documents and explain metrics:
{ "documents": [ // Array of document objects as shown above ], "explainMetrics": { "planSummary": { "indexesUsed": [ { "query_scope": "Collection", "properties": "(field ASC, __name__ ASC)" } ] }, "executionStats": { "resultsReturned": 50, "readOperations": 50, "executionDuration": "120ms", "debugStats": { "indexes_entries_scanned": "1000", "documents_scanned": "50", "billing_details": { "documents_billable": "50", "index_entries_billable": "1000", "min_query_cost": "0" } } } } }
Error Handling
The tool will return errors for:
- Invalid collection path
- Malformed filter JSON
- Unsupported operators
- Query execution failures
- Invalid orderBy format