MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Има начин за налагане на референтна цялост в MongoDB

Във връзка с референтната цялост при изтривания, при условие че всички заявки за изтриване се обслужват от вашето приложение, то може да се обработи чрез проверка, че ID не съществува в свързаните колекции преди изтриване на записи. Правя това по следния начин

CRUD операции (Ние се занимаваме само с Изтриване тук - обърнете внимание как предавам масив от обекти, които са колекцията и полето, което трябва да бъде съпоставено с ID на документа (запис), който изтриваме

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 Това е общ манипулатор на заявки за изтриване, който използвам за CRUD операции. Предавам масив от стойности на колекция/поле и проверявам дали има един запис, който съответства на идентификатора на документа, който се изтрива.

// 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 Java Inserting Throws org.bson.codecs.configuration.CodecConfigurationException:Не мога да намеря кодек за клас io.github.ilkgunel.mongodb.Pojo

  2. Търсете в множество колекции в MongoDB

  3. Десериализирайте обект като интерфейс с MongoDB C# драйвер

  4. Как да комбинирате използването на оператора all и icontains за mongoengine

  5. Как да управлявате документи в MongoDB