Boolean Operators
Overview
Boolean operators combine multiple conditions to build complex queries. They control how individual field conditions are logically combined to determine which documents match.
Available Operators
| Operator | Description |
|---|---|
$must | All conditions must match |
$should | At least one condition should match, or acts as a score booster when combined with $must |
$mustNot | Excludes documents matching any condition |
$boost | Adjusts the score contribution of a boolean clause |
How Boolean Operators Work Together
Boolean operators can be combined in a single query to express complex logic. The operators work together as follows:
$mustdefines the required conditions. Documents must match ALL of these.$shouldadds optional conditions:- When used alone: documents must match at least one condition
- When combined with
$must: conditions become optional score boosters
$mustNotfilters out unwanted documents from the result set.
Combining Operators
Here's an example that uses all three operators together:
// Find in-stock electronics, preferring wireless products, excluding budget itemsawait products.query({ filter: { $must: { category: "electronics", inStock: true, }, $should: [ { name: "wireless" }, { description: "bluetooth" }, ], $mustNot: { description: "budget", }, },});# Find in-stock electronics, preferring wireless products, excluding budget itemsproducts.query(filter={ "$must": {"category": "electronics", "inStock": True}, "$should": [{"name": "wireless"}, {"description": "bluetooth"}], "$mustNot": {"description": "budget"},})# Find in-stock electronics, preferring wireless products, excluding budget itemsSEARCH.QUERY products '{"$must": {"category": "electronics", "inStock": true}, "$should": [{"name": "wireless"}, {"description": "bluetooth"}], "$mustNot": {"description": "budget"}}'This query:
- Requires documents to be in the "electronics" category AND in stock
- Boosts documents that mention "wireless" or "bluetooth" (but doesn't require them)
- Excludes any documents containing "budget" in the description
Nesting Boolean Operators
Boolean operators can be nested to create more complex logic:
// Find products that are either (premium electronics) OR (discounted sports items)await products.query({ filter: { $should: [ { $must: { category: "electronics", description: "premium", }, }, { $must: { category: "sports", price: { $lt: 50 }, }, }, ], },});# Find products that are either (premium electronics) OR (discounted sports items)products.query(filter={ "$should": [ {"$must": {"category": "electronics", "description": "premium"}}, {"$must": {"category": "sports", "price": {"$lt": 50}}}, ],})# Find products that are either (premium electronics) OR (discounted sports items)SEARCH.QUERY products '{"$should": [{"$must": {"category": "electronics", "description": "premium"}}, {"$must": {"category": "sports", "price": {"$lt": 50}}}]}'