sql >> Database >  >> NoSQL >> MongoDB

Er is een manier om referentiële integriteit af te dwingen in MongoDB

Met betrekking tot referentiële integriteit bij verwijderingen, mits alle verwijderingsverzoeken door uw toepassing worden afgehandeld, kan deze worden afgehandeld door te controleren of ID niet bestaat in gerelateerde collecties voordat records worden verwijderd. Ik doe dit als volgt

CRUD-bewerkingen (we houden ons hier alleen bezig met verwijderen - merk op hoe ik een reeks objecten doorgeef, de verzameling en het veld dat moet worden vergeleken met de ID van het document (record) dat we verwijderen

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-verwijderingshandler Dit is een generieke verwijderingsverzoekhandler die ik gebruik voor CRUD-bewerkingen. Ik geef een reeks verzameling / veldwaarden door en controleer of er een enkele record is die overeenkomt met de ID van het document dat wordt verwijderd.

// 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)
    }
  })
}


  1. MongoDB Query, sorteer en neem het nde document voor groep

  2. Een MongoDB opvragen op basis van Mongo ID in een node.js-app

  3. hoe ObjectId correct in mangoest te casten

  4. Hoe een verbinding met Redis Sentinel tot stand te brengen met behulp van de Jedis-bibliotheek?