Skip to main content

A small Python MongoDB Document-Based access engine.

Project description

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

Project details


Download files

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

Files for pmongo, version 1.0.16
Filename, size File type Python version Upload date Hashes
Filename, size pmongo-1.0.16.tar.gz (5.5 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page