MongoDB extension

A storage/query backend for MongoDB.

status:beta
database:MongoDB
dependencies:pymongo
suitable for:general purpose (mostly server-side)

Warning

this module is not intended for production. It contains some hacks and should be refactored. However, it is actually used in a real project involving complex queries. Patches, improvements, rewrites are welcome.

class doqu.ext.mongodb.StorageAdapter(**kw)
Parameters:
  • host
  • port
  • database
  • collection
clear()

Clears the whole storage from data, resets autoincrement counters.

connect()

Connects to the database. Raises RuntimeError if the connection is not closed yet. Use reconnect() to explicitly close the connection and open it again.

delete(key)

Deletes record with given primary key.

disconnect()

Closes internal store and removes the reference to it. If the backend works with a file, then all pending changes are saved now.

find(doc_class=<type 'dict'>, **conditions)

Returns instances of given class, optionally filtered by given conditions.

Parameters:
  • doc_class – Document class. Default is dict. Normally you will want a more advanced class, such as Document or its more concrete subclasses (with explicit structure and validators).
  • conditions – key/value pairs, same as in where().

Note

By default this returns a tuple of (key, data_dict) per item. However, this can be changed if doc_class provides the method from_storage(). For example, Document has the notion of “saved state” so it can store the key within. Thus, only a single Document object is returned per item.

get(key, doc_class=<type 'dict'>)

Returns document instance for given document class and primary key. Raises KeyError if there is no item with given key in the database.

Parameters:
  • key – a numeric or string primary key (as supported by the backend).
  • doc_class – a document class to wrap the data into. Default is dict.
get_many(keys, doc_class=<type 'dict'>)

Returns an iterator of documents with primary keys from given list. Basically this is just a simple wrapper around get() but some backends can reimplement the method in a much more efficient way.

get_or_create(doc_class=<type 'dict'>, **conditions)

Queries the database for records associated with given document class and conforming to given extra conditions. If such records exist, picks the first one (the order may be random depending on the database). If there are no such records, creates one.

Returns the document instance and a boolean value “created”.

reconnect()

Gracefully closes current connection (if it’s not broken) and connects again to the database (e.g. reopens the file).

save(key, data)

Saves given data with given primary key into the storage. Returns the primary key.

Parameters:
  • key – the primary key for given object; if None, will be generated.
  • data – a dict containing all properties to be saved.

Note that you must provide current primary key for a record which is already in the database in order to update it instead of copying it.

sync()

Synchronizes the storage to disk immediately if the backend supports this operation. Normally the data is synchronized either on save(), or on timeout, or on disconnect(). This is strictly backend-specific. If a backend does not support the operation, NotImplementedError is raised.

class doqu.ext.mongodb.QueryAdapter(*args, **kw)
count()

Returns the number of records that match given query. The result of q.count() is exactly equivalent to the result of len(q) but does not involve fetching of the records.

delete()

Deletes all records that match current query.

order_by(names, reverse=False)

Returns a query object with same conditions but with results sorted by given field. By default the direction of sorting is ascending.

Parameters:
  • names – list of strings: names of fields by which results should be sorted. Some backends may only support a single field for sorting.
  • reversebool: if True, the direction of sorting is reversed and becomes descending. Default is False.
values(name)

Returns a list of unique values for given field name.

Parameters:name – the field name.

Note

A set is dynamically build on client side if the query contains conditions. If it doesn’t, a much more efficient approach is used. It is only available within current connection, not query.

where(**conditions)

Returns Query instance filtered by given conditions. The conditions are specified by backend’s underlying API.

where_not(**conditions)

Returns Query instance. Inverted version of where().

Project Versions

Previous topic

Tokyo Tyrant extension

Next topic

Document Fields

This Page