> 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: and(query: WixDataQuery) # Method package: wixData # Method menu location: wixData --> WixDataDistinct --> and # Method Link: https://dev.wix.com/docs/velo/apis/wix-data/wix-data-distinct/and.md # Method Description: Adds an `and` condition to the query or filter. The `and()` function adds an `and` condition to a `WixDataQuery` or `WixDataFilter`. A query or filter with an `and` returns all the items that match the query or filter as defined up to the `and` function and also match the query or filter passed to the `and` function. Note that when chaining multiple `WixDataFilter` functions to a query an `and` condition is assumed. In such cases, you do not need to add a call to the `and()` function. For example, this query returns results where status is active **and** age is greater than 25. ```javascript wixData.query("myCollection") .eq("status", "active") .gt("age", 25); ``` The `and()` function is needed when performing compound queries. For example, the final query in this set of queries returns results where status is either pending or rejected **and** age is either less than 25 or greater than 65. ```javascript let statusQuery = wixData.query("myCollection") .eq("status", "pending") .or( wixData.query("myCollection") .eq("status", "rejected") ); let ageQuery = wixData.query("myCollection") .lt("age", 25) .or( wixData.query("myCollection") .gt("age", 65) ); let statusAndAgeQuery = statusQuery.and(ageQuery); ``` The collections referenced by both the initial query and the query passed to the `and` function must be the same. The 'and()' function is designed to work with 2 or more queries or filters. If you use it on its own, it will return all the items in a collection. # Method Code Examples: *** Note: do not assume any prop names or enum values other than the ones in the example. ## Add an and to a query ```javascript let newQuery = query1.and(query2); ``` ## Create two or queries, add an and, and run it ```javascript import wixData from 'wix-data'; // ... let statusQuery = wixData.query("myCollection") .eq("status", "pending") .or( wixData.query("myCollection") .eq("status", "rejected") ); let ageQuery = wixData.query("myCollection") .lt("age", 25) .or( wixData.query("myCollection") .gt("age", 65) ); statusQuery.and(ageQuery) .find() .then((results) => { if(results.items.length > 0) { let items = results.items; let firstItem = items[0]; let totalCount = results.totalCount; let pageSize = results.pageSize; let currentPage = results.currentPage; let totalPages = results.totalPages; let hasNext = results.hasNext(); let hasPrev = results.hasPrev(); let length = results.length; let query = results.query; } else { // handle case where no matching items found } }) .catch((error) => { let errorMsg = error.message; let code = error.code; }); /* * For example, results contain items where age is: * 18 * 21 * 67 * 90 * * But not items where age is: * 25 * 30 * 40 * 65 */ ``` ---