Skip to main content

PMongo

A small Python MongoDB Document-Based access engine.

Install

 pip install pmongo

Useage

# base use

# import
from pmongo.document import Document
from pmongo.utils import get_mongo_db

db = get_mongo_db(dbname='test')


# define document class
class Data(Document):
    db = db
    class Meta:
        ordering = ['age']


# new a instance
d1 = Data()

# set data and save
d1['grade'] = 2
d1['name'] = 'Tom'
d1['age'] = 8
d1.save()

d2 = Data()
d2['grade'] = 2
d2['name'] = 'Lucy'
d2['age'] = 6
d2.save()

d3 = Data()
d3['grade'] = 3
d3['name'] = 'Jack'
d3['age'] = 7
d3.save()

# display document ObjectId
print('d1.id:', d1.id)

# query
print('grade=2:', Data.objects.find(grade=2).all())

# query count
print('count of grade=2:', Data.objects.find(grade=2).count())

# default order by
print('default order by', Data.objects.find().all())
print('default order by -age', Data.objects.find().order_by('-age').all())

# change
d2['grade'] = 1
d2.save()

print('count of grade=2:', Data.objects.find(grade=2).count())

# delete document
Data.objects.find(grade=2).delete()

print('-------')

# django like query
from pmongo.query import QueryManger


class Data2(Document):
    db = db
    objects = QueryManger()


print(Data2.objects.create(age=20, name='Tom'))

Data2(age=10, name='Jone').save()
Data2(age=15, name='Jack').save()

print('age>=10:', Data2.objects.find(age__gte=10).count())
print('age>11:', Data2.objects.find(age__gt=11).count())

print('between 10~21', Data2.objects.find(age__between=(10, 21)).count())

# delete age field
d1.unset(['age'])
print(d1)

# update data
print('update', Data2.objects.find(age__between=(10, 21)).update(age=25))

print('between 10~21', Data2.objects.find(age__between=(10, 21)).count())

print('age=25', Data2.objects.find(age=25).count())

Data(name='Robin', books=[{'bid': 1, 'name': 'Python Cookbook'}, {'bid': 2, 'name': 'Java 23 Days'}, {'bid': 3, 'name': 'Android Kit'}]).save()
Data(name='Tom', books=[{'bid': 10, 'name': 'DDL'}]).save()

print('book of [1]:', Data.objects.find({'books.bid': 1}).count())
print('book of [2, 10]:', Data.objects.find({'books.bid': {'$in': [2, 10]}}).count())

print(Data.objects.find(name='Tom').values(name=0, _id=0).all())

d1 = Data.objects.find().first()
d2 = Data.objects.find().first()

print('--------')

print(id(d1), d1)
print(id(d2), d2)
print(d1 == d2)

print(set([d1, d2]))

print(Data.objects.find().delete())
print(Data2.objects.find().delete())

Output:

d1.id: 5bf7ddc8f56f4bc0d639a572
grade=2: [Data[{'_id': ObjectId('5bf7ddc8f56f4bc0d639a573'), 'grade': 2, 'name': 'Lucy', 'age': 6}], Data[{'_id': ObjectId('5bf7ddc8f56f4bc0d639a572'), 'grade': 2, 'name': 'Tom', 'age': 8}]]
count of grade=2: 2
default order by [Data[{'_id': ObjectId('5bf7ddc8f56f4bc0d639a573'), 'grade': 2, 'name': 'Lucy', 'age': 6}], Data[{'_id': ObjectId('5bf7ddc8f56f4bc0d639a574'), 'grade': 3, 'name': 'Jack', 'age': 7}], Data[{'_id': ObjectId('5bf7ddc8f56f4bc0d639a572'), 'grade': 2, 'name': 'Tom', 'age': 8}]]
default order by -age [Data[{'_id': ObjectId('5bf7ddc8f56f4bc0d639a572'), 'grade': 2, 'name': 'Tom', 'age': 8}], Data[{'_id': ObjectId('5bf7ddc8f56f4bc0d639a574'), 'grade': 3, 'name': 'Jack', 'age': 7}], Data[{'_id': ObjectId('5bf7ddc8f56f4bc0d639a573'), 'grade': 2, 'name': 'Lucy', 'age': 6}]]
count of grade=2: 1
-------
Data2[{'age': 20, 'name': 'Tom', '_id': ObjectId('5bf7ddc8f56f4bc0d639a575')}]
age>=10: 3
age>11: 2
between 10~21 3
Data[{'grade': 2, 'name': 'Tom', '_id': ObjectId('5bf7ddc8f56f4bc0d639a572')}]
update 3
between 10~21 0
age=25 3
book of [1]: 1
book of [2, 10]: 2
[Data[{'books': [{'bid': 10, 'name': 'DDL'}]}]]
--------
4475195856 Data[{'_id': ObjectId('5bf7ddc8f56f4bc0d639a573'), 'grade': 1, 'name': 'Lucy', 'age': 6}]
4475196976 Data[{'_id': ObjectId('5bf7ddc8f56f4bc0d639a573'), 'grade': 1, 'name': 'Lucy', 'age': 6}]
False
{Data[{'_id': ObjectId('5bf7ddc8f56f4bc0d639a573'), 'grade': 1, 'name': 'Lucy', 'age': 6}], Data[{'_id': ObjectId('5bf7ddc8f56f4bc0d639a573'), 'grade': 1, 'name': 'Lucy', 'age': 6}]}
4
3

CHANGES

1.0.0

  • first version

1.0.6

  • support "create, update"

1.0.8

  • fix find() with dictionary param

1.0.9

  • suport values()

1.0.10

  • suport Meta ordering

1.0.11

  • remove eq of Document

1.0.12

  • support Python 3.x

1.0.14

  • support update_fields when save a document

1.0.16

  • fix $lte date bug

Download files

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

Source Distribution

pmongo-1.0.16.tar.gz (5.5 kB view details)

Uploaded Source

File details

Details for the file pmongo-1.0.16.tar.gz.

File metadata

  • Download URL: pmongo-1.0.16.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.6.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/2.7.10

File hashes

Hashes for pmongo-1.0.16.tar.gz
Algorithm Hash digest
SHA256 c80cd77a1bb11578cef0dfedf41946c3d0b8fd71117d642f9ebdf11f8918eb43
MD5 c52e6cda922f253d7fd52f94599126c4
BLAKE2b-256 29bcd13564b23518d275c57b7281f029b2ebb83703006c0dcb8d5868fff2fae9

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.16 This release

1 file

1.0.15

1 file

1.0.14

1 file

1.0.12

1 file

1.0.11

1 file

1.0.9

1 file

1.0.8

1 file

1.0.6

1 file

1.0.4

1 file

1.0.3

1 file

1.0.2

1 file

1.0.0

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page