In Bezug auf die referenzielle Integrität bei Löschvorgängen, vorausgesetzt, dass alle Löschanforderungen von Ihrer Anwendung bedient werden, können sie vor dem Löschen von Datensätzen bearbeitet werden, indem überprüft wird, ob die ID in verwandten Sammlungen nicht vorhanden ist. Ich mache das wie folgt
CRUD-Operationen (Wir beschäftigen uns hier nur mit dem Löschen - beachten Sie, wie ich ein Array von Objekten übergebe, die die Sammlung und das Feld sind, das mit der ID des Dokuments (Datensatzes) abgeglichen werden muss, das wir löschen.
const express = require('express')
const router = express.Router()
const iflexCRUD = require('../../lib/iflexCRUD')
const { UnitType } = require('../../models/Unittype')
const { Unit } = require('../../models/Unit')
iflexCRUD.create(router, '/', UnitType)
iflexCRUD.read(router, '/', UnitType, { sort: 'name' })
iflexCRUD.update(router, '/:id', UnitType)
iflexCRUD.deleteByID(router, '/:id', UnitType, [
{
model: Unit,
field: 'unittype'
}
])
iflexCRUD.delete(router, '/unittype/:unittype', UnitType)
module.exports = router
CRUD Delete Handler Dies ist ein allgemeiner Löschanforderungs-Handler, den ich für CRUD-Operationen verwende. Ich übergebe ein Array von Sammlungs-/Feldwerten und überprüfe, ob es einen einzelnen Datensatz gibt, der mit der ID des zu löschenden Dokuments übereinstimmt.
// CRUD-DELETE
iflexCRUD.deleteByID = (router, route, Collection, refs = []) => {
router.delete(route, async (req, res) => {
try {
let exception = false
//Enforce Referential Integrity for deletes - Deny when ID is used in any of refs collections
//Loop through any referenced files (first record) to ensure there are no other collections using this document
for (let i = 0; i < refs.length; i++) {
if (!exception) {
let refObj = {}
refObj[refs[0].field] = req.params.id
const result = await refs[i].model.findOne(refObj, (err, rec) => {})
exception = result !== null
}
}
// Process deletion of there are no exceptions
if (!exception) {
const doc = await Collection.deleteOne({ _id: req.params.id })
res.send(doc)
} else {
return res
.status(401)
.json(
'Document is already use in related collection - it cannot Delete!'
)
}
} catch (e) {
return res.status(401).json(e.message)
}
})
}