rxdb
Version:
A local-first realtime NoSQL Database for JavaScript applications - https://rxdb.info/
354 lines • 7.47 kB
JavaScript
export var NOSQL_QUERY_JSON_SCHEMA = {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "NoSQL Query",
"description": "Query selector with sort and limit options. See https://rxdb.info/rx-query.html",
"type": "object",
"additionalProperties": true,
"required": ["selector"],
"properties": {
"selector": {
"$ref": "#/$defs/expression"
},
"sort": {
"$ref": "#/$defs/sort"
},
"limit": {
"type": "integer",
"minimum": 1,
"examples": [10, 50, 100]
},
"skip": {
"type": "integer",
"minimum": 0,
"examples": [10, 50]
}
},
"examples": [{
"selector": {
"age": {
"$gt": 18
},
"status": "active"
},
"sort": [{
"createdAt": "desc"
}],
"limit": 10
}, {
"selector": {
"$or": [{
"company.name": {
"$regex": "Inc",
"$options": "i"
}
}, {
"tags": {
"$in": ["premium", "vip"]
}
}],
"address.country": "USA"
},
"limit": 50
}],
default: {
"selector": {},
"sort": [],
"limit": 50,
"skip": 0
},
"$defs": {
"sort": {
"description": "Sort document (e.g. [{ createdAt: 'desc' }, { name: 'asc' }]).",
"type": "array",
"items": {
"type": "object",
"minProperties": 1,
"additionalProperties": false,
"patternProperties": {
"^(?!\\$).+$": {
"type": "string",
"enum": ["asc", "desc"]
}
}
},
"examples": [[{
"createdAt": "desc"
}], [{
"lastName": "asc"
}, {
"createdAt": "desc"
}]]
},
"expression": {
"anyOf": [{
"$ref": "#/$defs/logicalExpression"
}, {
"$ref": "#/$defs/fieldExpression"
}]
},
"logicalExpression": {
"type": "object",
"additionalProperties": false,
"properties": {
"$and": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/expression"
},
"examples": [[{
"status": "active"
}, {
"age": {
"$gte": 21
}
}]]
},
"$or": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/expression"
},
"examples": [[{
"role": "admin"
}, {
"role": "moderator"
}]]
},
"$nor": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/expression"
},
"examples": [[{
"archived": true
}, {
"deleted": true
}]]
},
"$not": {
"$ref": "#/$defs/expression",
"examples": [{
"age": {
"$lt": 18
}
}, {
"name": {
"$regex": "^test"
}
}]
}
},
"anyOf": [{
"required": ["$and"]
}, {
"required": ["$or"]
}, {
"required": ["$nor"]
}, {
"required": ["$not"]
}],
"examples": [{
"$and": [{
"status": "active"
}, {
"age": {
"$gte": 21
}
}]
}, {
"$or": [{
"tier": "pro"
}, {
"trial": true
}]
}, {
"$nor": [{
"deleted": true
}, {
"blocked": true
}]
}, {
"$not": {
"age": {
"$gte": 65
}
}
}]
},
"fieldExpression": {
"type": "object",
"minProperties": 1,
"additionalProperties": false,
"patternProperties": {
"^(?!\\$).+$": {
"anyOf": [{
"$ref": "#/$defs/literal"
}, {
"$ref": "#/$defs/fieldOperatorExpression"
}]
}
},
"examples": [{
"status": "active"
}, {
"age": {
"$gte": 18
}
}, {
"tags": {
"$in": ["nosql", "database"]
}
}]
},
"fieldOperatorExpression": {
"type": "object",
"minProperties": 1,
"additionalProperties": false,
"properties": {
"$eq": {
"$ref": "#/$defs/literal",
"examples": ["active", 42, null]
},
"$ne": {
"$ref": "#/$defs/literal",
"examples": ["deleted", 0]
},
"$gt": {
"$ref": "#/$defs/literal",
"examples": [10, 100]
},
"$gte": {
"$ref": "#/$defs/literal",
"examples": [18, 0]
},
"$lt": {
"$ref": "#/$defs/literal",
"examples": [100, 5]
},
"$lte": {
"$ref": "#/$defs/literal",
"examples": [5, 99]
},
"$in": {
"type": "array",
"items": {
"$ref": "#/$defs/literal"
},
"examples": [["red", "green"], [1, 2, 3]]
},
"$nin": {
"type": "array",
"items": {
"$ref": "#/$defs/literal"
},
"examples": [["test", "dummy"], [0, -1]]
},
"$exists": {
"type": "boolean",
"examples": [true, false]
},
"$regex": {
"type": "string",
"examples": ["^A", ".*example.*", "^[0-9]{4}$"]
},
"$options": {
"type": "string",
"examples": ["i", "g", "m"]
},
"$type": {
"oneOf": [{
"type": "string"
}, {
"type": "integer"
}, {
"type": "array",
"items": {
"oneOf": [{
"type": "string"
}, {
"type": "integer"
}]
}
}],
"examples": ["string", "number", 2, ["string", "null"]]
},
"$size": {
"type": "integer",
"minimum": 0,
"examples": [0, 3]
},
"$mod": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"type": "integer"
},
"examples": [[4, 0], [10, 5]]
},
"$elemMatch": {
"$ref": "#/$defs/expression",
"examples": [{
"qty": {
"$gte": 10
}
}, {
"type": "book"
}]
}
},
"examples": [{
"$eq": "active"
}, {
"$ne": "deleted"
}, {
"$gt": 10
}, {
"$gte": 18
}, {
"$lt": 100
}, {
"$lte": 5
}, {
"$in": ["red", "green"]
}, {
"$nin": ["test"]
}, {
"$exists": true
}, {
"$regex": "^A"
}, {
"$type": "string"
}, {
"$size": 3
}, {
"$mod": [4, 0]
}, {
"$elemMatch": {
"qty": {
"$gte": 10
}
}
}]
},
"literal": {
"oneOf": [{
"type": "null"
}, {
"type": "boolean"
}, {
"type": "number"
}, {
"type": "string"
}, {
"type": "array"
}, {
"type": "object"
}]
}
}
};
//# sourceMappingURL=nosql-query-schema.js.map