MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Ada cara untuk menegakkan integritas referensial di MongoDB

Sehubungan dengan integritas referensial pada penghapusan, asalkan semua permintaan penghapusan dilayani oleh aplikasi Anda, maka hal itu dapat ditangani dengan memeriksa ID tidak ada dalam koleksi terkait sebelum menghapus catatan. Saya melakukan ini sebagai berikut

Operasi CRUD (Kami hanya peduli dengan Hapus di sini - perhatikan bagaimana saya melewatkan array objek yang menjadi koleksi dan bidang yang perlu dicocokkan dengan ID dokumen (catatan) yang kami hapus

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 HandlerIni adalah handler permintaan penghapusan generik yang saya gunakan untuk operasi CRUDSaya melewati array nilai Collection / Field dan memeriksa untuk melihat apakah ada satu record yang cocok dengan ID dokumen yang sedang dihapus.

// 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB/PHP:hapus elemen dari array

  2. $elemMatch dengan perbedaan

  3. Mongodb:db.printShardingStatus() / sh.status() panggilan di Java (dan JavaScript)

  4. Mengapa PyMongo membuang AutoReconnect?

  5. Buat Aplikasi Pencatat untuk Android Dengan MongoDB Stitch