MCPcopy Index your code
hub / github.com/MongoEngine/mongoengine / delete

Method delete

mongoengine/queryset/base.py:440–529  ·  view source on GitHub ↗

Delete the documents matched by the query. :param write_concern: Extra keyword arguments are passed down which will be used as options for the resultant ``getLastError`` command. For example, ``save(..., write_concern={w: 2, fsync: True}, ...)`` will

(self, write_concern=None, _from_doc_delete=False, cascade_refs=None)

Source from the content-addressed store, hash-verified

438 return count
439
440 def delete(self, write_concern=None, _from_doc_delete=False, cascade_refs=None):
441 """Delete the documents matched by the query.
442
443 :param write_concern: Extra keyword arguments are passed down which
444 will be used as options for the resultant
445 ``getLastError`` command. For example,
446 ``save(..., write_concern={w: 2, fsync: True}, ...)`` will
447 wait until at least two servers have recorded the write and
448 will force an fsync on the primary server.
449 :param _from_doc_delete: True when called from document delete therefore
450 signals will have been triggered so don't loop.
451
452 :returns number of deleted documents
453 """
454 queryset = self.clone()
455 doc = queryset._document
456
457 if write_concern is None:
458 write_concern = {}
459
460 # Handle deletes where skips or limits have been applied or
461 # there is an untriggered delete signal
462 has_delete_signal = signals.signals_available and (
463 signals.pre_delete.has_receivers_for(doc)
464 or signals.post_delete.has_receivers_for(doc)
465 )
466
467 call_document_delete = (
468 queryset._skip or queryset._limit or has_delete_signal
469 ) and not _from_doc_delete
470
471 if call_document_delete:
472 cnt = 0
473 for doc in queryset:
474 doc.delete(**write_concern)
475 cnt += 1
476 return cnt
477
478 delete_rules = doc._meta.get("delete_rules") or {}
479 delete_rules = list(delete_rules.items())
480
481 # Check for DENY rules before actually deleting/nullifying any other
482 # references
483 for rule_entry, rule in delete_rules:
484 document_cls, field_name = rule_entry
485 if document_cls._meta.get("abstract"):
486 continue
487
488 if rule == DENY:
489 refs = document_cls.objects(**{field_name + "__in": self})
490 if refs.limit(1).count() > 0:
491 raise OperationError(
492 "Could not delete document (%s.%s refers to it)"
493 % (document_cls.__name__, field_name)
494 )
495
496 # Check all the other rules
497 for rule_entry, rule in delete_rules:

Callers

nothing calls this directly

Calls 9

cloneMethod · 0.95
OperationErrorClass · 0.90
set_write_concernFunction · 0.90
itemsMethod · 0.80
limitMethod · 0.80
getMethod · 0.45
objectsMethod · 0.45
countMethod · 0.45
updateMethod · 0.45

Tested by

no test coverage detected