Utility methods for MongoDB ORM, built on top of mongoengine.
Project description
Welcome to mongoengine_mate Documentation
mongoengine_mate includes lots more utility method in ORM model Class, makes mongoengine more powerful.
Usage
import mongoengine
from mongoengine_mate import ExtendedDocument
class User(ExtendedDocument):
id = mongoengine.IntField()
name = mongoengine.StringField()
First, you got better __repr__() like:
>>> User(id=1, name="Alice")
User(id=1, name="Alice")
# access its collection or database
>>> col_user = User.col()
>>> col_user.find({"_id": 1})
>>> col_db = User.db()
# access its field name in order
>>> User.fields_ordered()
["id", "name"]
# provide dictionary-like api
>>> user = User(id=1, name="Alice")
>>> user.keys()
["id", "name"]
>>> user.values()
[1, "Alice"]
>>> user.items()
[("id", "name"), (1, "Alice")]
>>> user.to_dict()
{"id": 1, "name": "Alice"}
>>> user.to_OrderedDict()
OrderedDict([("id", "name"), (1, "Alice")])
Smart Insert - Skip Primary Key Conflict
When you do batch insert, sometimes one or a few documents may cause _id field conflict error, which is breaking the batch insert operation.
Usually you have to write a for loop` and use ``try ... except ... to ignore conflict. But, it is SLOW!
ExtendedDocument.smart_insert provides a fast and convenient way to batch insert lots of document at once correctly.
# insert one document which breaks the batch insert
User(id=100, name="Obama").save()
# smart_insert, automatically handle NotUniqueError
User.smart_insert([
User(id=1, name="Alice"),
User(id=2, name="Bob"),
...
User(id=1000, name="Zillow"),
])
Smart Update - Batch Upsert
When you do batch update, you mostly want to use the _id field to locate which document you want to update.
>>>User(id=2, name="Bob").save()
# update only
>>> User.smart_update([
User(id=1, name="Alice"),
User(id=2, name="Bruce"),
User(id=3, name="Cathy"),
], upsert=False)
>>> User.objects.count()
1
# upsert
>>> User.smart_update([
User(id=1, name="Alice"),
User(id=2, name="Bruce"),
User(id=3, name="Cathy"),
], upsert=True)
>>> User.objects.count()
3
Install
mongoengine_mate is released on PyPI, so all you need is:
$ pip install mongoengine_mate
To upgrade to latest version:
$ pip install --upgrade mongoengine_mate
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
Built Distribution
File details
Details for the file mongoengine_mate-0.0.5.tar.gz
.
File metadata
- Download URL: mongoengine_mate-0.0.5.tar.gz
- Upload date:
- Size: 15.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.2 requests-toolbelt/0.9.1 tqdm/4.41.0 CPython/2.7.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5547085ce7c32f6bba2d3dd30582c4ab2831ab012dca2e2a41ef06c28092a4f4 |
|
MD5 | 1e2bab9550b8f5705dd2b2f49d451136 |
|
BLAKE2b-256 | 0f9387ef53ee7aa6df1ef9ceb50154b1e35ac734ace25b06dc25945f99799c21 |
File details
Details for the file mongoengine_mate-0.0.5-py2.py3-none-any.whl
.
File metadata
- Download URL: mongoengine_mate-0.0.5-py2.py3-none-any.whl
- Upload date:
- Size: 16.8 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.2 requests-toolbelt/0.9.1 tqdm/4.41.0 CPython/2.7.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d22176bc9fc8148ef906c4903d586a06de7e0840ffca75377f3054cd0a9fa419 |
|
MD5 | 76e76f4481a2908c08ce164cedfe7305 |
|
BLAKE2b-256 | b280f0f66e698f5e380c3d2999033c3786a84d7c60a6cde492f68f30b707720a |