mongose再認識(一)


mongooseはODM(Object Data Model)のライブラリであり、オブジェクトデータモデルとも呼ばれる.では、なぜ と言うのでしょうか.
注意:MongoDBまたはMongoは、NoSQLタイプのデータベース、つまり非リレーショナルタイプのデータベースです.
データを処理し、オブジェクト間の変換を実現するために使用されます.
  • データ処理:Schemaを作成し、Schemaのデータ検証機能を提供する.
  • オブジェクトの変換:これらのオブジェクトは、開発中に作成されたオブジェクトとMongodDBで表される対応するオブジェクトを指します.

  • 分からなかったり、知っているようで分からなかったりしたら、次の文を読んだら、きっとわかると思います.
    よく使われる用語
    Collections
    MongoのCollectionsはリレーショナル・データベースのテーブルに相当し、JSONドキュメント(document)が大量に含まれています.
    Documents DocumentsはSQLの (records)または (rows)に相当します.SQLでは複数のテーブルを使用し、データ間の参照によってデータ間の関連を表現する必要がありますが、MongoではDocumentで実現できます.
    Schema
    SQL定義schemaはテーブルの定義を通りますが、MongoDBにはこれがありません.MongoDBを使用して直接挿入した場合はdocumentです.mongoseは、schemaのデータ構造または構造関数を表すためにdocumentを定義し、アプリケーションレベルで構築され、各docuemntはその例示的なオブジェクトである.
    Fields Fieldsまたは属性と呼ばれ、SQLの (columns)に相当し、schemaを形成するために使用されます.
    Models Schemaと同様にデータ構造または構造関数ですが、より特殊です.schemaを使用して、SQLのDocument(record)に相当する のインスタンスを作成します.
    mongoseのSchemaとModel
    mongoseのschemadocumentの構造関数であり、documentのデフォルト値を定義してフィールド(fields)の検証を行うことができます.
    mongoseのmodelは、document(レコードとも呼ばれる)に対するCRUD(増加、調査、変更、削除)を実現するデータにアクセスするインタフェースを提供している.
    したがって,modelSchemaのパッケージであり,パッケージによりSchema構造のデータとMongoDBデータベースとの相互作用を実現しているといえる.
    注:開発の過程では、ModelSchemaの例が使用されているので、文章の冒頭で述べた が理解できます.具体的には、以下のサンプルコードを参照してください.
    mongoseを引用
    使用前にmongooeをインストールする必要があります.yarn install mongooseでインストールし、次のコードで参照してください.
    //   mongoose
    let mongoose = require('mongoose')

    説明:SchemaModelは明示的にデータベースに接続されていないのに、なぜそう言うのか.開発の過程で、使用されたmongoose.connect("mongodb://127.0.0.1:27017")が返すオブジェクトで作成されたSchemaModelではなく、直接使用されたmongooseの参照であるため、このようなメリットは明らかであり、性能が大幅に向上した.
    mongose定義は単一の設計モードを使用するため、requireを使用して単一のオブジェクトを返します.これは開発でよく見られ、自分のライブラリを書くのに指導的な意味があります.
    MongoDBデータベースへの接続
    //   mongoose
    let mongoose = require('mongoose')
    //    demo     
    mongoose.connect('mongodb://127.0.0.1:27017/demo')

    Schemaの定義
    collectionのすべてのdocumentは、同じSchemaによって定義されたfieldを使用する.各documentオブジェクトのキー名は、Schemaによって定義される.
    //   mongoose
    let mongoose = require('mongoose')
    //    demo     
    mongoose.connect('mongodb://127.0.0.1:27017/demo')
    //         Schema
    let userSchema = new mongoose.Schema({
      firstname: String,
      lastname: String
    })
    Schemaにおいても、fieldfirstnameタイプであるなど、Stringについて検証することができる.Schemaのフィールド値は、Array、String、Boolean、Buffer、Date、Number、ObjectId、またはMixed(汎用、または可変データ型)であってもよい.
    モデルを定義してインスタンス化
    //   mongoose
    let mongoose = require('mongoose')
    //    demo     
    mongoose.connect('mongodb://127.0.0.1:27017/demo')
    //         Schema
    let UserSchema = new mongoose.Schema({
      firstname: String,
      lastname: String
    })
    //     Model
    let UserModel = mongoose.model('User', userSchema)
    //      Model
    let person = new Usermodel({
      firstname: '  ',
      lastname: ' '
    })

    なぜSchemaの定義とインスタンス化を一緒に置くことができ、Modelの定義とインスタンス化を分けるのか疑問に思う人もいるかもしれません.schemaの例は特定の動作に関与しないため、Modelの例は複雑な動作に関与することが多い.だから前者は開発の中で往々にして2つのステップを一緒にして、後者は別々にします.
    mongoseのCRUD
    データの追加
    person
      .save()
      .then(doc => {
        console.log(doc)
      })
      .catch(err => {
        console.error(err)
      })

    データの表示
    UserModel
      .find({
        lastname: ' '   // query
      })
      .then(doc => {
        console.log(doc)
      })
      .catch(err => {
        console.error(err)
      })

    データの更新
    UserModel
      .findOneAndUpdate(
        {
          lasttname: ' '  // query
        }, 
        {
          firstname: 'xxx'   // field:values    
        },
        {
          new: true,                       //       document
          runValidators: true              //         
        })
      .then(doc => {
        console.log(doc)
      })
      .catch(err => {
        console.error(err)
      })

    データの削除
    UserModel
      .findOneAndRemove({
        firstname: '  '
      })
      .then(response => {
        console.log(response)
      })
      .catch(err => {
        console.error(err)
      })

    もちろんmongoseは実用的なapiもたくさん提供していますが、ここではあまり言いません.mongoose queries
    mongoseシリーズ記事
  • mongose再認識(一)
  • mongose再認識(二)
  • mongose再認識(三)