MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak ograniczyć maksymalne odniesienie węzła rodzicielskiego w mongodb

Jeśli używasz mongo w wersji 3.6, możesz włączyć walidację schematu za pomocą $jsonSchema po stronie serwera

każdy dokument, który zaktualizujemy/wstawimy, zostanie zweryfikowany względem schematu walidacji, jeśli walidacja się nie powiedzie, zostanie zgłoszony błąd i nie zostaną wprowadzone żadne modyfikacje w dokumencie

przykładowy node schemat kolekcji

{
   _id : string,
   parent : [string, null],
   children : string[2]
}

schemat walidacji

db.createCollection("node", {
   validator: {
      $jsonSchema: {
         bsonType: "object",
         required: [ "_id" ],
         properties: {
            parent: {
               bsonType: ["string", "null"],
               description: "must be a string"
            },
            children: {
               bsonType: ["array"],
               items : { bsonType: ["string"] },
               minItems: 0,
               maxItems: 2,
               description: "must be a array of string and max is 2"
            }
         }
      }
   }
});

wstawia [z ważnymi dokumentami]

> db.node.insert( { _id: "Books", children: [ "Programming" ], parent: null } )
WriteResult({ "nInserted" : 1 })
> db.node.insert( { _id: "Programming", children: [ "Databases", "Languages" ], parent: "Books" } )
WriteResult({ "nInserted" : 1 })
> db.node.insert( { _id: "Languages", children: [ ], parent: "Programming" } )
WriteResult({ "nInserted" : 1 })
> db.node.insert( { _id: "Databases", children: [ "MongoDB", "dbm" ], parent: "Programming" } )
WriteResult({ "nInserted" : 1 })
> db.node.insert( { _id: "MongoDB", children: [ ], parent: "Databases" } )
WriteResult({ "nInserted" : 1 })
> db.node.insert( { _id: "dbm", children: [ ], parent: "Databases" } )
WriteResult({ "nInserted" : 1 })
> 

znajdź

> db.node.find()
{ "_id" : "Books", "children" : [ "Programming" ], "parent" : null }
{ "_id" : "Programming", "children" : [ "Databases", "Languages" ], "parent" : "Books" }
{ "_id" : "Languages", "children" : [ ], "parent" : "Programming" }
{ "_id" : "Databases", "children" : [ "MongoDB", "dbm" ], "parent" : "Programming" }
{ "_id" : "MongoDB", "children" : [ ], "parent" : "Databases" }
{ "_id" : "dbm", "children" : [ ], "parent" : "Databases" }

wstaw z nieprawidłowym dokumentem [rozmiar dziecka> 2]

> db.node.insert({_id : "1", children : ["c1", "c2", "c3"], parent : "p1"})
WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 121,
        "errmsg" : "Document failed validation"
    }
})
> 

wstawienie nie powiodło się z błędem walidacji

aktualizacja - próba dodania trzeciego dziecka do baz danych _id, nie powiodła się z błędem walidacji

> db.node.updateOne( { _id: "Databases"}, {$push : {children: [ "Oracle" ]}} )
2018-02-25T21:00:08.087+0530 E QUERY    [thread1] WriteError: Document failed validation :
WriteError({
    "index" : 0,
    "code" : 121,
    "errmsg" : "Document failed validation",
    "op" : {
        "q" : {
            "_id" : "Databases"
        },
        "u" : {
            "$push" : {
                "children" : [
                    "Oracle"
                ]
            }
        },
        "multi" : false,
        "upsert" : false
    }
})
[email protected]/mongo/shell/bulk_api.js:466:48
Bulk/[email protected]/mongo/shell/bulk_api.js:846:49
Bulk/[email protected]/mongo/shell/bulk_api.js:910:13
Bulk/[email protected]/mongo/shell/bulk_api.js:1154:21
[email protected]/mongo/shell/crud_api.js:572:17
@(shell):1:1
> 

proszę zapoznać się z schema-validation &jsonSchema aby uzyskać więcej opcji, dodając walidację do istniejących kolekcji i obsługę niepowodzeń walidacji




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Masowe wstawianie mongodb w Meteor lub Node

  2. Spring data mongodb projektowanie aplikacji i agregacja danych

  3. $lookup, gdy w zagnieżdżonej tablicy znajduje się obcyField

  4. Laravel 5.2 Mongo MonogDB Nie udało się przeanalizować URI MongoDB

  5. Mongoimport ignoruje wiodące zero w csv