mongoquery
A utility library that provides a MongoDB-like query language for querying python collections. It’s mainly intended to parse objects structured as fundamental types in a similar fashion to what is produced by JSON or YAML parsers. It follows the specification of queries for MongoDB version 3.4.
Usage
Example:
from mongoquery import Query, QueryError
records = [
{"a": 5, "b": 5, "c": None},
{"a": 3, "b": None, "c": 8},
{"a": None, "b": 3, "c": 9},
{"a": 1, "b": 2, "c": 3},
{"a": 2, "c": 5},
{"a": 3, "b": 2},
{"a": 4},
{"b": 2, "c": 4},
{"b": 2},
{"c": 6}
]
a_is_3 = Query({"a": 3})
# match a single object
matched = a_is_3.match(records[1])
assert matched
matched = a_is_3.match(records[0])
assert not matched
# filter elements
filtered = filter(
a_is_3.match,
records
)
assert filtered == [records[1], records[5]]
# incorrect filters raise QueryError
try:
matched = query({"$foo": 2}).match(records[1])
except QueryError:
pass # => "$foo" operator isn't supported
Query syntax
The syntax of queries matches closely the one of MongoDB queries, and translates it to python using the following rules:
operators and field identifiers are expressed as strings. For instance, the following MongoDB query:
{ memos: { $elemMatch: { memo: 'on time', by: 'billing' } } }Translates straightforwardly to the following Python dict:
{ "memos": { "$elemMatch": { "memo": 'on time', "by": 'billing' } } }regular expressions are expected to be expressed as string containing the MongoDB regular expression syntax. For instance:
{description: {$regex: /^S/m}}Translates to the following Python dict:
{"description": {"$regex": "/^S/m"}}the boolean, null syntax used in MongoDB follows the JavaScript syntax. It is expected the python equivalents are used. For instance:
{a: {$exists: true}, b: null}Translates to the following Python dict:
{"a": {"$exists": True}, "b": None}
Functional differences with MongoDB’s queries
- There are a few features that are not supported by mongoquery:
Only the "/pattern/<options>" syntax is supported for $regex. As a consequence, $options isn’t supported. Alternatively you can compile a regex using re.compile and supply options as parameters, and pass the re.Pattern object as the value of $regex.
$text hasn’t been implemented.
Due to the pure python nature of this library, $where isn’t supported.
The Geospatial operators $geoIntersects, $geoWithin, $nearSphere, and $near are not implemented.
Projection operators $`, $elemMatch, $meta, and $slice are not implemented (only querying is implemented)
$type is limited to recognising generic python types, it won’t look into recognising the format of the data (for instance, it doesn’t check Object ID’s format, only that they are strings)
Metadata
Release files for mongoquery 1.4.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| mongoquery-1.4.3.tar.gz | 8.2 kB | Without provenance | Details for mongoquery-1.4.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| mongoquery-1.4.3-py3-none-any.whl | Python 3 | none | any | Details for mongoquery-1.4.3-py3-none-any.whl |
Total release size: 14.6 kB
Release files / mongoquery-1.4.3.tar.gz
| Download URL | mongoquery-1.4.3.tar.gz |
|---|---|
| Size | 8.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e901f86ee5af7ef6eda2f2c26f4bd2cfe8380d81f178b7e3607dbbcdcee97239
|
|
BLAKE2b-256 checksum How to use checksums |
f1ec8e0ddb347c6c5b94e0147b2b9ea1fd9dbfda5d222d0e529996445c30faaa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.23
|
Release files / mongoquery-1.4.3-py3-none-any.whl
| Download URL | mongoquery-1.4.3-py3-none-any.whl |
|---|---|
| Size | 6.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8be47635c5e361c9f363b7a901a2b86649687491b7aaca2d12601eff41cb6128
|
|
BLAKE2b-256 checksum How to use checksums |
ce337ce3f09d91a0ca5db7cca67671d865b7c8310b8b59eff287a711919641f0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.23
|
Security for mongoquery 1.4.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.