Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from mongoengine import connect, Document, StringField, ListField, ReferenceField
- from pathos.multiprocessing import ProcessingPool
- class Base(Document):
- key = StringField(primary_key=True)
- name = StringField()
- parent = ReferenceField('Parent', required=True)
- class Parent(Document):
- key = StringField(primary_key=True)
- name = StringField()
- bases = ListField(ReferenceField('Base'))
- def remove_base(key):
- db = connect('mydb')
- mongo_b = Base.objects().get(key=key)
- mongo_b.parent.update(pull__bases=mongo_b)
- mongo_b.delete()
- ### setup
- db = connect('mydb', connect=False)
- Base(key='b1', name='test', parent='p1').save()
- Base(key='b2', name='test', parent='p1').save()
- Base(key='b3', name='test2', parent='p1').save()
- p=Parent(key='p1', name='parent').save()
- p.update(add_to_set__bases='b1')
- p.update(add_to_set__bases='b2')
- p.update(add_to_set__bases='b3')
- ### find objects we want to delete
- my_base_objects = Base.objects(name='test')
- keys = [b.key for b in my_base_objects]
- del my_base_objects
- # close db to avoid problems?!
- db.close()
- db = None
- # parallel map removing base objects and references from the db
- # warning generated here
- pp = ProcessingPool(2)
- pp.map(remove_base, keys)
Add Comment
Please, Sign In to add comment