Guest User

Untitled

a guest
Mar 20th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.21 KB | None | 0 0
  1. from mongoengine import connect, Document, StringField, ListField, ReferenceField
  2. from pathos.multiprocessing import ProcessingPool
  3.  
  4.  
  5. class Base(Document):
  6. key = StringField(primary_key=True)
  7. name = StringField()
  8. parent = ReferenceField('Parent', required=True)
  9.  
  10. class Parent(Document):
  11. key = StringField(primary_key=True)
  12. name = StringField()
  13. bases = ListField(ReferenceField('Base'))
  14.  
  15.  
  16. def remove_base(key):
  17. db = connect('mydb')
  18. mongo_b = Base.objects().get(key=key)
  19. mongo_b.parent.update(pull__bases=mongo_b)
  20. mongo_b.delete()
  21.  
  22.  
  23. ### setup
  24. db = connect('mydb', connect=False)
  25.  
  26. Base(key='b1', name='test', parent='p1').save()
  27. Base(key='b2', name='test', parent='p1').save()
  28. Base(key='b3', name='test2', parent='p1').save()
  29.  
  30. p=Parent(key='p1', name='parent').save()
  31. p.update(add_to_set__bases='b1')
  32. p.update(add_to_set__bases='b2')
  33. p.update(add_to_set__bases='b3')
  34.  
  35. ### find objects we want to delete
  36. my_base_objects = Base.objects(name='test')
  37. keys = [b.key for b in my_base_objects]
  38. del my_base_objects
  39.  
  40. # close db to avoid problems?!
  41. db.close()
  42. db = None
  43.  
  44. # parallel map removing base objects and references from the db
  45. # warning generated here
  46. pp = ProcessingPool(2)
  47. pp.map(remove_base, keys)
Add Comment
Please, Sign In to add comment