> 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: beforeDistinct(distinct: WixDataDistinct, context: HookContext) # Method package: wixDataHooks # Method menu location: wixDataHooks --> beforeDistinct # Method Link: https://dev.wix.com/docs/velo/events-service-plugins/data/hooks/wix-data-hooks/before-distinct.md # Method Description: A hook triggered before a distinct query operation. The `beforeDistinct()` hook is triggered when the [`distinct()`](https://dev.wix.com/docs/velo/api-reference/wix-data/wix-data-query/distinct.md) method is called. It allows you to modify the [`WixDataDistinct`](https://dev.wix.com/docs/velo/apis/wix-data/wix-data-distinct/introduction.md) object before the distinct query runs. Return a [`WixDataDistinct`](https://dev.wix.com/docs/velo/apis/wix-data/wix-data-distinct/introduction.md) object or a Promise that resolves to a `WixDataDistinct` object. The returned object defines the distinct query that runs instead of the original distinct query created by the [`distinct()`](https://dev.wix.com/docs/velo/api-reference/wix-data/wix-data-query/distinct.md) method. If the returned value is of the wrong type, the value is ignored. A rejected Promise blocks the call to [`distinct()`](https://dev.wix.com/docs/velo/api-reference/wix-data/wix-data-query/distinct.md) and triggers the [`onFailure()`](#onFailure) hook, if it has been registered. # Method Code Examples: *** Note: do not assume any prop names or enum values other than the ones in the example. ## A `beforeDistinct` hook ```javascript // In data.js export function myCollection_beforeDistinct(distinct, context) { let hookContext = context; // See below // Some change to the received query return distinct; } /* * hookContext: * * { * "collectionName": "myCollection", * "userId": "f45jf8d2-grkj-2opd-4ovk-9rfj4wo5tvj3", * "userRole": "siteOwner" * } */ ``` ## Refine the distinct query before it runs ```javascript // In data.js export function myCollection_beforeDistinct(distinct, context) { let hookContext = context; // See below // Add a new restriction to the current filter const filter = distinct.getFilter(); const updateFilter = filter.ge("price", 100); // Set the updated filter in the distinct query const updatedDistinct = distinct.filter(updateFilter); return updatedDistinct; } /* * hookContext: * * { * "collectionName": "myCollection", * "userId": "f45jf8d2-grkj-2opd-4ovk-9rfj4wo5tvj3", * "userRole": "siteOwner" * } */ ``` ---