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削除ハンドラーこれは、CRUD操作に使用する一般的な削除要求ハンドラーです。コレクション/フィールド値の配列を渡し、削除するドキュメントのIDと一致する単一のレコードがあるかどうかを確認します。

    // 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. マングースを使用した動的スキーマの作成

    2. マングーススキーマを動的に作成するにはどうすればよいですか?

    3. TrelloはMongoDBにデータをどのように保存しますか? (ボードごとのコレクション?)

    4. ASP.NETCoreControllerでのStackExchange.Redisの使用