> Portal Navigation: > > - Append `.md` to any URL under `https://dev.wix.com/docs/` to get its markdown version. > - Pages are either content pages (article or reference text) or menu pages (a list of links to child pages). > - To get a menu page, truncate any URL to a parent path and append `.md` (e.g. `https://dev.wix.com/docs/sdk.md`, `https://dev.wix.com/docs/sdk/core-modules.md`). > - Top-level index of all portals: https://dev.wix.com/docs/llms.txt > - Full concatenated docs: https://dev.wix.com/docs/llms-full.txt # Method name: beforeCount(query: WixDataQuery, context: HookContext) # Method package: wixData # Method menu location: wixData --> Hooks --> beforeCount # Method Link: https://dev.wix.com/docs/velo/apis/wix-data/hooks/before-count.md # Method Description: A hook that is triggered before a `count()` operation. The `beforeCount()` hook runs when: + The [`count()`](wix-data.WixDataQuery.html#count) function is called. + The collection is viewed in the CMS. Return a query or a Promise that resolves to a query from the `beforeCount()` function. The returned query will be used as the query for the [`count()`](wix-data.WixDataQuery.html#count) operation. Often, you will modify the query that is received in the `query` parameter by calling one or more [`WixDataQuery`](wix-data.WixDataQuery.html) functions. If the returned value is of the wrong type, the value is ignored. A rejected Promise blocks the call to [`count()`](wix-data.WixDataQuery.html#count) and also calls the [`onFailure()`](#onFailure) hook if it has been registered. Because the `beforeCount()` hook is called before [`count()`](wix-data.WixDataQuery.html#count) is executed, it can affect how items are counted or block the [`count()`](wix-data.WixDataQuery.html#count). # Method Code Examples: *** Note: do not assume any prop names or enum values other than the ones in the example. ## A beforeCount hook ```javascript // In data.js export function myCollection_beforeCount(query, context) { let hookContext = context; // see below // some change to the received query return query; } /* * hookContext: * * { * "collectionName": "myCollection", * "userId": "f45jf8d2-grkj-2opd-4ovk-9rfj4wo5tvj3", * "userRole": "siteOwner" * } */ ``` ## Change the query used for the count, using a beforeCount hook ```javascript // In data.js export function myCollection_beforeCount(query, context) { let hookContext = context; // see below // some change to the received query let newQuery = query.eq("status", "active"); return newQuery; } /* * hookContext: * * { * "collectionName": "myCollection", * "userId": "f45jf8d2-grkj-2opd-4ovk-9rfj4wo5tvj3", * "userRole": "siteOwner" * } */ ``` ---