マングースを学ぶ


Mongoose は MongoDB のラッパーのようなものです.

mongoose を使用すると、mongoDB が接続されるまで待つ必要はありません. Mongoose は、作成したすべてのコマンドをキューに入れ、mongoDB に接続した後でのみそれらのコマンドを作成します.

マングースの場合、3 つの基本的な概念を知る必要があります.

マングースの内部には、最初に理解する必要がある 3 つの主要な概念があります.
  • スキーマ - データの構造がどのように見えるかを定義します.
  • モデル - スキーマの実際の形式です.モデルは、ドキュメントを構築するためのクラスです.
  • クエリ - クエリは、mongoDB データベースに対して行う単なるクエリです.

  • すべてのスキーマを 1 つのファイルに書き込むことができます.ただし、スキーマごとに異なるファイルを使用することをお勧めします.

    スキーマは、キーと値のペアを持つオブジェクトを受け取ります.ここで、キーは mongoDB オブジェクト内のキーの名前です.したがって、ユーザーに name を持たせたい場合は、名前のキーを与えます.そして、値は **name* ,* のデータ型、つまり String になります.

    const mongoose = require('mongoose')
    
    const userSchema = new mongoose.Schema({
        name: String,
        age : Number
    })
    


    これで、名前フィールドと年齢フィールドを定義するユーザー スキーマができました.名前は文字列になり、年齢は数字になります.

    次に、このスキーマのモデルを作成する必要があります.これには mongoose.model() 関数を使用する必要があります.この関数はモデルの名前を受け取ります.この場合、これは「ユーザー」になります.そして、2 番目のパラメーターとしてスキーマを渡す必要があります.

    mongoose.model('User', userSchema)
    


    別のファイルにスキーマを作成する場合は、モデルをエクスポートする必要があります.

    module.exports=  mongoose.model('User', userSchema)
    


    では、ユーザーを作成しましょう.

    別のファイルでスキーマを作成したため、メイン スクリプトでそれを要求する必要があります.

    const User = require('./user');
    


    User クラスを新しいユーザーオブジェクトとしてインスタンス化し、オブジェクトを渡すことでユーザーを作成できます.

    new User({ name: 'abir', age: 6 })
    


    スクリプトでユーザーのローカル コピーを作成するだけです.データベースには保存されません.これには save() 関数を使用する必要があります.

    【ご利用をお約束します.しかし、async await instant of promise を使用する方がよりクリーンです. ]\

    run();
    async function run() {
        const user = await new User({ name: 'abir', age: 6 })
        await user.save();
        console.log(user);
            //return
            // {
            //    name: 'abir',
        //    age: 6,
        //    _id: new ObjectId("61ccb948e35a787b6ad2b812"),
        //    __v: 0
        // }
    }
    


    実際の User クラスで create() メソッドを使用してユーザーを作成することもできます.

    run();
    async function run() {
        const user = await User.create({ name: 'abir', age: 21 })
        console.log(user)
    }
    


    スキーマ タイプ



    String、Number、Date、ObjectId などの多くの型を使用できます.

    アドレスで行ったように、スキーマでネストされたオブジェクトを使用できます ——

    const mongoose = require('mongoose');
    
    const userSchema = new mongoose.Schema({
        name: String,
        age: Number,
        cratedAt: Date,
        updatedAt: Date,
        bestFriend: mongoose.SchemaTypes.ObjectId,
        hobbies: [String],
        address: {
            street: String,
            city: String,
        }
    });
    
    module.exports = mongoose.model('User', userSchema);
    


    このように、「住所」の完全なスキーマを作成できます

    const addressSchema = new mongoose.Schema({
        street: String,
        city: String,
    });
    
    const userSchema = new mongoose.Schema({
        name: String,
        age: Number,
        cratedAt: Date,
        updatedAt: Date,
        bestFriend: mongoose.SchemaTypes.ObjectId,
        hobbies: [String],
        address: addressSchema,
    });
    


    これは、複雑なスキーマに非常に役立ちます.

    検証——————————



    エラー処理には try catch を使用する必要があります

    const mongoose = require('mongoose');
    const User = require('./user');
    
    mongoose.connect('mongodb://localhost/test', () => {
        console.log('connected');
    })
    
    run();
    async function run() {
        try {
    
            const user = await User.create({
                name: 'abir',
                age: 'ab'
            })
            user.name = 'rafi'
            user.save();
            console.log(user)
        } catch (e) {
            console.log(e.message)
        }
    
    }
    


    オブジェクト形式でスキーマのフィールドに追加のプロパティを追加できます.

    このようなスキーマでフィールド「require」を設定できます—

    const userSchema = new mongoose.Schema({
        name: String,
        email:{
            type: String,
            required: true,
        },
        age: Number,
    });
    


    スキーマで使用できるいくつかの追加プロパティ-
  • required - html フォームの require 属性に似ています.つまり、提出済みの
  • を含める必要があります.
  • 小文字 - 指定された電子メールを自動的に小文字に変換します.
  • 大文字 - 指定された電子メールを自動的に大文字に変換します.
  • デフォルト - デフォルト値を設定します.
  • immutable - フィールドを不変または変更不可にします.