Functional Reactive array filtering and aggregation with a MongoDB inspired syntax.
For normal usage arrays are returned with the results.
var Bloc = require('bloc');
var data = [
{
id: 1,
region: 'us-east-1'
},
{
id: 2,
region: 'us-west-1'
}
];
var filter = {
region: {
$eq: 'us-east-1'
}
};
Bloc.filter(data, filter).then(function(results) {
// Results contains all items in the `us-east-1` region.
}, function(reason) {
// Something went wrong
});
If desired, a stream can be returned instead.
var Bloc = require('bloc');
var data = [
{
id: 1,
region: 'us-east-1'
},
{
id: 2,
region: 'us-west-1'
}
];
var filter = {
region: {
$eq: 'us-east-1'
}
};
Bloc.filter(data, filter, { stream: true }).then(function(stream) {
stream.subscribe(function(item) {
// Stream will eventually contain all items in the `us-east-1` region.
});
}, function(reason) {
// Something went wrong
});
Below is a list of all the supported query selectors.
Used for the comparison of different values for filters.
Matches all values that are equal to a specified value.
{
<field>: {
$eq: <value>
}
}
Matches all values that are not equal to a specified value.
{
<field>: {
$ne: <value>
}
}
Matches values that are greater than a specified value.
{
<field>: {
$gt: <value>
}
}
Matches values that are greater than or equal to a specified value.
{
<field>: {
$gte: <value>
}
}
Matches values that are less than a specified value.
{
<field>: {
$lt: <value>
}
}
Matches values that are less than or equal to a specified value.
{
<field>: {
$lte: <value>
}
}
Matches any of the values specified in an array.
{
<field>: {
$in: [ <value1>, <value2>, ... <valueN> ]
}
}
Matches none of the values specified in an array.
{
<field>: {
$nin: [ <value1>, <value2>, ... <valueN> ]
}
}
Operators which do some sort of evaluation.
Performs a modulo operation on the value of a field and selects documents with a specified result.
{
<field>: {
$mod: [
divisor,
remainder
]
}
}
Selects documents where values match a specified regular expression.
{
<field>: {
$regex: <regular expression>
}
}
Matches documents that satisfy a JavaScript function.
{
<field>: {
$where: <function>
}
}
Used for grouping together filter clauses.
Joins query clauses with a logical OR returns all documents that match the conditions of either clause.
{
$or: [
{
<expression1>
},
{
<expression2>
},
...,
{
<expressionN>
}
]
}
Joins query clauses with a logical AND returns all documents that match the conditions of both clauses.
{
$and: [
{
<expression1>
},
{
<expression2>
},
...,
{
<expressionN>
}
]
}
Inverts the effect of a query expression and returns documents that do not match the query expression.
{
<field>: {
$not: {
<operator>: <value>
}
}
}
Joins query clauses with a logical NOR returns all documents that fail to match both clauses.
{
$nor: [
{
<expression1>
},
{
<expression2>
},
...,
{
<expressionN>
}
]
}
Operators to use when filtering arrays.
Matches arrays that contain all elements specified in the query.
{
<field>: {
$all: [
<value1>,
<value2>,
...,
<valueN>
]
}
}
Selects documents if element in the array field matches all the specified conditions.
{
<field>: {
$elemMatch: {
<query1>,
<query2>,
...,
<queryN>
}
}
}
Selects documents if the array field is the specified size.
{
<field>: {
$size: <number>
}
}
Operators to use when setting up pipeline stages.
Filters the document stream to allow only matching documents to pass unmodified into the next pipeline stage. $match uses standard queries. For each input document, outputs either one document (a match) or zero documents (no match).
{
$match: {
<query>
}
}
Passes the first n documents unmodified to the pipeline where n is the specified limit. For each input document, outputs either one document (for the first n documents) or zero documents (after the first n documents).
{
$limit: <positive integer>
}
Skips the first n documents where n is the specified skip number and passes the remaining documents unmodified to the pipeline. For each input document, outputs either zero documents (for the first n documents) or one document (if after the first n documents).
{
$skip: <positive integer>
}