Skip to main content



A CollectionFilter defines a rule which can be used to associate ProductVariants with a Collection. The filtering is done by defining the apply() function, which receives a TypeORM QueryBuilder object to which clauses may be added.

Creating a CollectionFilter is considered an advanced Vendure topic. For more insight into how they work, study the default collection filters

Here's a simple example of a custom CollectionFilter:


import { CollectionFilter, LanguageCode } from '@vendure/core';

export const skuCollectionFilter = new CollectionFilter({
args: {
// The `args` object defines the user-configurable arguments
// which will get passed to the filter's `apply()` function.
sku: {
type: 'string',
label: [{ languageCode: LanguageCode.en, value: 'SKU' }],
description: [
languageCode: LanguageCode.en,
value: 'Matches any product variants with SKUs containing this value',
code: 'variant-sku-filter',
description: [{ languageCode: LanguageCode.en, value: 'Filter by matching SKU' }],

// This is the function that defines the logic of the filter.
apply: (qb, args) => {
const LIKE = qb.connection.options.type === 'postgres' ? 'ILIKE' : 'LIKE';
return qb.andWhere(`productVariant.sku ${LIKE} :sku`, { sku: `%${args.sku}%` });
class CollectionFilter<T extends ConfigArgs = ConfigArgs> extends ConfigurableOperationDef<T> {
constructor(config: CollectionFilterConfig<T>)
apply(qb: SelectQueryBuilder<ProductVariant>, args: ConfigArg[]) => SelectQueryBuilder<ProductVariant>;


(config: CollectionFilterConfig<T>) => CollectionFilter


(qb: SelectQueryBuilder<ProductVariant>, args: ConfigArg[]) => SelectQueryBuilder<ProductVariant>