11 KiB
Filter Operators
Used in the filter paramaters of the find
, findOne
, findAndCount
, count
, etc. APIs of repository:
const repository = db.getRepository('books');
repository.find({
filter: {
title: {
$eq: 'Spring and Autumn',
}
}
});
To support JSON, NocoBase identifies query operators as a string prefixed with $.
Moreover, NocoBase provides API to extend operators. Refer to db.registerOperators()
.
General Operators
$eq
Check if the field value is equal to the specified value. Equivalent to =
in SQL.
Example
repository.find({
filter: {
title: {
$eq: 'Spring and Autumn',
}
}
});
Equal to title: 'Spring and Autumn'
$ne
Check if the field value is not equal to the specified value. Equivalent to !=
in SQL.
Example
repository.find({
filter: {
title: {
$ne: 'Spring and Autumn',
}
}
});
$is
Check if the field value is the specified value. Equivalent to IS
in SQL.
Example
repository.find({
filter: {
title: {
$is: null,
}
}
});
$not
Check if the field value is not the specified value. Equivalent to IS NOT
in SQL.
Example
repository.find({
filter: {
title: {
$not: null,
}
}
});
$col
Check if the field value is equal to the value of another field. Equivalent to =
in SQL.
Example
repository.find({
filter: {
title: {
$col: 'name',
}
}
});
$in
Check if the field value is in the specified array. Equivalent to IN
in SQL.
Example
repository.find({
filter: {
title: {
$in: ['Spring and Autumn', 'Warring States'],
}
}
});
$notIn
Check if the field value is not in the specified array. Equivalent to NOT IN
in SQL.
Example
repository.find({
filter: {
title: {
$notIn: ['Spring and Autumn', 'Warring States'],
}
}
});
$empty
Check if the general field is empty. For string field, check if it is an empty string; for array field, check if it is an empty array.
Example
repository.find({
filter: {
title: {
$empty: true,
}
}
});
$notEmpty
Check if the general field is not empty. For string field, check if it is not an empty string; for array field, check if it is not an empty array.
Example
repository.find({
filter: {
title: {
$notEmpty: true,
}
}
});
Logical Operators
$and
Logical AND. Equivalent to AND
in SQL.
Example
repository.find({
filter: {
$and: [
{ title: 'Book of Songs' },
{ isbn: '1234567890' },
]
}
});
$or
Logical OR. Equivalent to OR
in SQL.
Example
repository.find({
filter: {
$or: [
{ title: 'Book of Songs' },
{ publishedAt: { $lt: '0000-00-00T00:00:00Z' } },
]
}
});
Boolean Field Operators
For boolean fields: type: 'boolean'
$isFalsy
Check if a Boolean field value is false. Boolean field values of false
, 0
and NULL
are all judged to be $isFalsy: true
.
Example
repository.find({
filter: {
isPublished: {
$isFalsy: true,
}
}
})
$isTruly
Check if a Boolean field value is true. Boolean field values of true
and 1
are all judged to be $isTruly: true
.
Example
repository.find({
filter: {
isPublished: {
$isTruly: true,
}
}
})
Numeric Type Field Operators
For numeric type fields, including:
type: 'integer'
type: 'float'
type: 'double'
type: 'real'
type: 'decimal'
$gt
Check if the field value is greater than the specified value. Equivalent to >
in SQL.
Example
repository.find({
filter: {
price: {
$gt: 100,
}
}
});
$gte
Check if the field value is equal to or greater than the specified value. Equivalent to >=
in SQL.
Example
repository.find({
filter: {
price: {
$gte: 100,
}
}
});
$lt
Check if the field value is less than the specified value. Equivalent to <
in SQL.
Example
repository.find({
filter: {
price: {
$lt: 100,
}
}
});
$lte
Check if the field value is equal to or less than the specified value. Equivalent to <=
in SQL.
Example
repository.find({
filter: {
price: {
$lte: 100,
}
}
});
$between
Check if the field value is between the specified two values. Equivalent to BETWEEN
in SQL.
Example
repository.find({
filter: {
price: {
$between: [100, 200],
}
}
});
$notBetween
Check if the field value is not between the specified two values. Equivalent to NOT BETWEEN
in SQL.
Example
repository.find({
filter: {
price: {
$notBetween: [100, 200],
}
}
});
String Type Field Operators
For string type fields, including string
.
$includes
Check if the string field contains the specified substring.
Example
repository.find({
filter: {
title: {
$includes: 'Three Character Classic',
}
}
})
$notIncludes
Check if the string field does not contain the specified substring.
Example
repository.find({
filter: {
title: {
$notIncludes: 'Three Character Classic',
}
}
})
$startsWith
Check if the string field starts with the specified substring.
Example
repository.find({
filter: {
title: {
$startsWith: 'Three Character Classic',
}
}
})
$notStatsWith
Check if the string field does not start with the specified substring.
Example
repository.find({
filter: {
title: {
$notStatsWith: 'Three Character Classic',
}
}
})
$endsWith
Check if the string field ends with the specified substring.
Example
repository.find({
filter: {
title: {
$endsWith: 'Three Character Classic',
}
}
})
$notEndsWith
Check if the string field does not end with the specified substring.
Example
repository.find({
filter: {
title: {
$notEndsWith: 'Three Character Classic',
}
}
})
$like
Check if the field value contains the specified string. Equivalent to LIKE
in SQL.
Example
repository.find({
filter: {
title: {
$like: 'Computer',
}
}
});
$notLike
Check if the field value does not contain the specified string. Equivalent to NOT LIKE
in SQL.
Example
repository.find({
filter: {
title: {
$notLike: 'Computer',
}
}
});
$iLike
Check if a field value contains the specified string, case ignored. Equivalent to ILIKE
in SQL (PG only).
Example
repository.find({
filter: {
title: {
$iLike: 'Computer',
}
}
});
$notILike
Check if a field value does not contain the specified string, case ignored. Equivalent to NOT ILIKE
in SQL (PG only).
Example
repository.find({
filter: {
title: {
$notILike: 'Computer',
}
}
});
$regexp
Check if the field value matches the specified regular expression. Equivalent to REGEXP
in SQL (PG only).
Example
repository.find({
filter: {
title: {
$regexp: '^Computer',
}
}
});
$notRegexp
Check if the field value does not matche the specified regular expression. Equivalent to NOT REGEXP
in SQL (PG only).
Example
repository.find({
filter: {
title: {
$notRegexp: '^Computer',
}
}
});
$iRegexp
Check if the field value matches the specified regular expression, case ignored. Equivalent to ~*
in SQL (PG only).
Example
repository.find({
filter: {
title: {
$iRegexp: '^COMPUTER',
}
}
});
$notIRegexp
Check if the field value does not matche the specified regular expression, case ignored. Equivalent to !~*
in SQL (PG only).
Example
repository.find({
filter: {
title: {
$notIRegexp: '^COMPUTER',
}
}
});
Date Type Field Operators
For date type fields: type: 'date'
$dateOn
Check if the date field value is within a certain day.
Example
repository.find({
filter: {
createdAt: {
$dateOn: '2021-01-01',
}
}
})
$dateNotOn
Check if the date field value is not within a certain day.
Example
repository.find({
filter: {
createdAt: {
$dateNotOn: '2021-01-01',
}
}
})
$dateBefore
Check if the date field value is before a certain value, i.e. less than the one passed in.
Example
repository.find({
filter: {
createdAt: {
$dateBefore: '2021-01-01T00:00:00.000Z',
}
}
})
$dateNotBefore
Check if the date field value is not before a certain value, i.e. equal to or greater than the one passed in.
Example
repository.find({
filter: {
createdAt: {
$dateNotBefore: '2021-01-01T00:00:00.000Z',
}
}
})
$dateAfter
Check if the date field value is after a certain value, i.e. greater than the one passed in.
Example
repository.find({
filter: {
createdAt: {
$dateAfter: '2021-01-01T00:00:00.000Z',
}
}
})
$dateNotAfter
Check if the date field value is not after a certain value, i.e. equal to or greater than the one passed in.
Example
repository.find({
filter: {
createdAt: {
$dateNotAfter: '2021-01-01T00:00:00.000Z',
}
}
})
Array Type Field Operators
For array type fields: type: 'array'
$match
Check if the array field values match values of the specified array.
Example
repository.find({
filter: {
tags: {
$match: ['literature', 'history'],
}
}
})
$notMatch
Check if the array field values do not match values of the specified array.
Example
repository.find({
filter: {
tags: {
$notMatch: ['literature', 'history'],
}
}
})
$anyOf
Check if the array field values contain any of the values of the specified array.
Example
repository.find({
filter: {
tags: {
$anyOf: ['literature', 'history'],
}
}
})
$noneOf
Check if the array field values contain none of the values of the specified array.
Example
repository.find({
filter: {
tags: {
$noneOf: ['literature', 'history'],
}
}
})
$arrayEmpty
Check if the array field is empty.
Example
repository.find({
filter: {
tags: {
$arrayEmpty: true,
}
}
});
$arrayNotEmpty
Check if the array field is not empty.
Example
repository.find({
filter: {
tags: {
$arrayNotEmpty: true,
}
}
});
Relational Field Type Operators
For checking if a relationship exists, field types include:
type: 'hasOne'
type: 'hasMany'
type: 'belongsTo'
type: 'belongsToMany'
$exists
There is relational data existing.
Example
repository.find({
filter: {
author: {
$exists: true,
}
}
});
$notExists
There is no relational data existing.
Example
repository.find({
filter: {
author: {
$notExists: true,
}
}
});