MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Có một cách để thực thi tính toàn vẹn của tham chiếu trong MongoDB

Liên quan đến tính toàn vẹn tham chiếu khi xóa, với điều kiện tất cả các yêu cầu xóa đều được ứng dụng của bạn phục vụ thì ứng dụng của bạn có thể xử lý bằng cách kiểm tra ID không tồn tại trong các bộ sưu tập liên quan trước khi xóa bản ghi. Tôi làm điều này như sau

Hoạt động CRUD (Chúng tôi chỉ quan tâm đến Xóa ở đây - lưu ý cách tôi truyền một mảng đối tượng là tập hợp và trường cần được khớp với ID của tài liệu (bản ghi) mà chúng tôi đang xóa

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 Đây là một trình xử lý yêu cầu xóa chung mà tôi sử dụng cho các hoạt động CRUD Tôi chuyển một mảng các giá trị của Bộ sưu tập / Trường và kiểm tra xem có một bản ghi nào khớp với ID của tài liệu đang bị xóa hay không.

// 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. Bản sao MongoDB không có thiết lập chính, cần thiết lập bản sao chính mới

  2. Chuẩn hóa dữ liệu trong MongoDB

  3. ObjectID được tạo bởi máy chủ trên pymongo

  4. Sử dụng Giá trị động trong Tổng hợp

  5. Không thể lấy gói Cơ sở tài khoản để trỏ đến cơ sở dữ liệu chính xác