Skip to main content

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.

Project description

https://travis-ci.org/kapouille/mongoquery.svg?branch=master

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)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mongoquery-1.4.2.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

mongoquery-1.4.2-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

Details for the file mongoquery-1.4.2.tar.gz.

File metadata

  • Download URL: mongoquery-1.4.2.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.9.13

File hashes

Hashes for mongoquery-1.4.2.tar.gz
Algorithm Hash digest
SHA256 bd19fc465f0aa9feb3070f144fde41fc68cf28ea32dd3b7565f7df3ab6fc0ac2
MD5 98968d6e2463505520f70634178caec1
BLAKE2b-256 9807e14a0e556f6610a36c28c03b988d54d62704e0f095cb1fe428f8b7602dc0

See more details on using hashes here.

File details

Details for the file mongoquery-1.4.2-py3-none-any.whl.

File metadata

  • Download URL: mongoquery-1.4.2-py3-none-any.whl
  • Upload date:
  • Size: 6.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.9.13

File hashes

Hashes for mongoquery-1.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5f7536b0e5b66ef79766b671af0b492836094101c6179c9f5f1b5968412ea6a2
MD5 b8a98d8cf58973dc8de8cc6d67253ccf
BLAKE2b-256 de3ce63127c743f6a1f7cc64c28956f104174da618eb4fbc5a3a1ce7c3bb018d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page