MongoDBデータベースの操作と操作コマンド

目次

1. 基本的な考え方

2.mongodをインストールする

 3. コマンド対話データベース

(1) データベースコマンド

(2) 収集コマンド

(3) ドキュメントコマンド

 4.マングース

(1) データを追加する

(2) 複数のデータを挿入する 

(3) データを削除する

(4) 複数のデータを削除する

(5)データ更新

(6) 複数のデータを更新する

(7) あるデータを以下の条件で読み出す

(8) idを元に特定のデータを読み込む

(9) 複数データの読み込み

(10) クエリ条件に従って読み込む

(11) 個別の読書

(12) 共通業務の開発

5. グラフィカルな管理


1. 基本的な考え方

Mongodb は分散ファイル ストレージに基づいたデータベースであり、正式なアドレスは https://www.mongodb.com/です。
データベースの主な機能は、追加、削除、変更、クエリを実行できるデータの管理であり、構文も JavaScript に似ています。
データベースを使用する前に理解しておくべき 3 つの概念
(1) データベース:データウェアハウスであり、例えばデータベースの下に多数のコレクションが存在します(複数のテーブルとも解釈できます)
(2) Collection: table、JavaScriptの退会フォームでは配列[ { id: 2 , name: Ultraman } ]として理解できます
(3) ドキュメント: 一つのデータとして理解できます JavaScript における退会フォームは {id:2, name:ultraman} として理解できます
たとえば、js コードを使用します。
{
    "users": [
        {
            "id": 1,
            "name": "张三",
            "age": 18,
        },
        {
            "id": 2,
            "name": "李四",
            "age": 20,
        },
    ],
    "articles": [
        {
            "id": 1,
            "title": "标题1",
            "content": "内容1",
        },
        {
            "id": 2,
            "title": "标题2",
            "content": "内容2",
        },
    ],

}

コードでは、オブジェクト全体がデータベース (JSON ファイル) であり、その中に 2 つのコレクション (テーブル) が含まれており、ユーザーテーブル記事テーブル ドキュメントは、あるテーブル内のデータとして理解できます。

もちろん、データベースは複数存在することもできますが、通常はプロジェクトごとに 1 つのデータベースが使用されます。

2.mongodをインストールする

ダウンロードアドレス: https://www.mongodb.com/try/download/community
汎用性の高い ジップ タイプを選ぶのがおすすめです
構成手順は次のとおりです。
  1. 圧縮パッケージをC:\Program Filesに移動し、解凍します。
  2. C:\data\dbディレクトリを作成します。mongodbはデフォルトでこのフォルダーにデータを保存します。
  3. mongodbのbin ディレクトリを作業ディレクトリとして使用して、コマンド ラインを開始します。
  4. mongodコマンドを実行します

mongod は毎回 bin ディレクトリで実行する必要があるため、環境変数を使用して設定できます。

  1. ディレクトリ名をコピーします。例: C:\Program Files\mongodb-win32-x86_64-windows-5.0.19\bin
  2. 編集変数を開き、パスを見つけて、そのパスを追加します。 
  3. 次回は cmd コマンド ウィンドウでテストできます。

 3. コマンド対話データベース

コマンド対話とは、cmd コマンド ラインを介して対話することです。

(1) データベースコマンド

  すべてのデータベースを表示
show dbs
指定したデータベースに切り替えます。データベースが存在しない場合は、データベースが自動的に作成されます。
use 数据库名

現在のデータベースを表示する

db

現在のデータベースを削除する

use 库名
db.dropDatabase()

(2)収集コマンド

コレクションを作成する
db.createCollection('集合名称')

現在のデータベース内のすべてのコレクションを表示します

show collections
コレクションを削除する
db.集合名.drop()
コレクションの名前を変更する
db.集合名.renameCollection('newName')

(3) ドキュメントコマンド

文書の挿入
db.集合名.insert(文档对象);

 クエリ document_id は、    mongodb によって自動的に生成される一意の番号で、ドキュメントを一意に識別するために使用されます。

db.集合名.find(查询条件)

 ドキュメントを更新する

db.集合名.update(查询条件,新的文档)
db.集合名.update({name:'张三'},{$set:{age:19}})

文書の削除

db.集合名.remove(查询条件)

 4.マングース

Mongoose はオブジェクト ドキュメント モデル ライブラリです。公式 Web サイト は http://www.mongoosejs.net/ です。
//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require("mongoose");
//3. 连接数据库
mongoose.connect("mongodb://127.0.0.1:27017/bilibili");
//4. 设置连接回调
//连接成功
mongoose.connection.on("open", () => {
  console.log("连接成功");
  //5. 创建文档结构对象
  let BookSchema = new mongoose.Schema({
    title: String,
    author: String,
    price: Number,
  });
  //6. 创建文档模型对象
  let BookModel = mongoose.model("book", BookSchema);
  //7. 插入文档
  BookModel.create(
    {
      title: "西游记",
      author: "吴承恩",
      price: 19.9,
    },
    (err, data) => {
      if (err) throw err;
      //输出 data 对象
      console.log(data);
      //8. 断开连接
      mongoose.disconnect();
    }
  );
});
//连接出错
mongoose.connection.on("error", () => {
  console.log("连接出错~~");
});
//连接关闭
mongoose.connection.on("close", () => {
  console.log("连接关闭");
});

フィールドタイプ

    title: String,
    price: Number,
    isHot: Boolean,
    category: Array,
    Date: Date,
    Buffer: Buffer,
    Mixed : mongoose.Schema.Types.Mixed, // 接收所有类型
    ObjectId: mongoose.Schema.Types.ObjectId, // 主键 对象ID 用来查询其他表
    Decimal:  mongoose.Schema.Types.Decimal128, // 高精度类型

一部のキーは、フィールド検証用のオブジェクトの形式で書き込むこともできます。

(1) 必要なもの

title: {
    type: String,
    required: true // 设置必填项
}

 (2)デフォルト値

author: {
    type: String,
    default: '匿名' //默认值
}

(3)列挙値

gender: {
    type: String,
    enum: ['男','女'] //设置的值必须是数组中的
}

(4)固有の値

username: {
    type: String,
    unique: true
}
効果を発揮するにはコレクションを再構築する 必要が ある

(1) データを追加する

mongoose.connection.on("open", () => {
    console.log("连接成功");
    let BookSchema = new mongoose.Schema({
        title: String,
        author: String,
        price: Number
    });

    let BookModel = mongoose.model('book', BookSchema);

    BookModel.create({
        title: "《水浒传》",
        price: 15,
    }).then((res) => {
        console.log(res);
        console.log("保存成功!");
    })
   
});

次に、model.operation をコードとして使用します

(2) 複数のデータを挿入する 

 BookModel.insertMany([
        {
            title: "《水浒传》",
            price: 15,
            isHot: true
        },
        {
            title: "《西游记》",
            price: 20,
            isHot: true
        }
    ]).then((res) => {
        console.log(res);
        console.log("保存成功!");
    })

(3) データを削除する

 BookModel.deleteOne({ _id: "64c604fb363d6aa46652f368" }).then((res) => { 
        console.log(res);
        console.log("删除成功!");
    })

(4) 複数のデータを削除する

isHot が false の場合はすべて削除

  BookModel.deleteMany({ isHot: false }).then((res) => {
        console.log(res);
        console.log("删除多个成功!");
    })

(5)データ更新

パラメータ1:条件、パラメータ2の更新内容

    BookModel.updateOne({ _id: "64c604fb363d6aa46652f362" },{price:99}).then((res) => { 
        console.log(res);
        console.log("更新成功!");
    })

(6) 複数のデータを更新する

    BookModel.updateMany({ isHot: true, },{isHot:false}).then((res) => {
        console.log(res);
        console.log("更新多个成功!");
    })

(7) あるデータを以下の条件で読み出す

     BookModel.findOne({ _id: "64c604fb363d6aa46652f362" }).then((res) => { 
        console.log("读取成功!",res);
    })

(8) idを元に特定のデータを読み込む

  BookModel.findById("64c604fb363d6aa46652f362").then((res) => { 
        console.log("读取成功!",res);
    })

(9) 複数データの読み込み

   BookModel.find({ isHot: false, }).then((res) => {
        console.log("读取多个成功!",res);
    })

(10) クエリ条件に従って読み込む

一部の条件は > < = では判断できないため、相対的なコマンド記号が必要です。

  •  > $gt を使用する
  •  < $lt を使用
  • >= $gte を使用する
  •  <= $lte を使用する
  • !== $ne を使用します

運用上の判断の例をいくつか示します。

    // 1.多个条件的查询 价格大于20 并且 isHot 为 false
    BookModel.find({ price: { $gt: 20 }, isHot: false }).then((res) => {
        console.log("价格大于20的", res);
    })
    
    // 2.多个条件的查询都要满足 价格大于20 或者 isHot 为 false
    BookModel.find({ $and: [{ price: { $gt: 20 } }, { isHot: false }] }).then((res) => {
        console.log("价格大于20的", res);   
    })
    

    // 3.多个条件的查询满足一个 价格大于20 或者 isHot 为 false
    BookModel.find({ $or: [{ price: { $gt: 20 } }, { isHot: true }] }).then((res) => {
        console.log("价格大于20的", res);
     })

    // 4. 查询价格在 20 - 30 之间的数据
    BookModel.find({ price: { $gte: 20, $lte: 30 } }).then((res) => {
        console.log("价格大于20的", res);
    })

    // 5.正则查询
    BookModel.find({ title: { $regex: /三国/ } }).then((res) => {
        console.log("查询包含三国的", res);
    })

(11) 個別の読書

検索後は、チェーン呼び出しを通じて後続の操作を実行することもできます。これも Promise によってカプセル化されています。

  // 1.只读取出数据的某些字段
    BookModel.find().select({title:1,price:1,_id:0}).then((res) => {
        console.log("筛选结果", res);
    })
    
    // 2.排序 1 升序 -1 降序
    BookModel.find().select({title:1,price:1,_id:0}).sort({price:1}).then((res) => {
        console.log("筛选结果", res);
    })
    
    // 3.数据截取
    BookModel.find().select({title:1,price:1,_id:0}).limit(2).then((res) => {
        console.log("筛选结果", res);
    })
    
    // 4.截取3-4条
    BookModel.find().select({title:1,price:1,_id:0}).skip(2).limit(2).then((res) => {
        console.log("筛选结果", res);
    })

(12) 共通業務の開発

 // 登录
  login: async ({ username, password }) => {
    return UserModel.find({ username, password });
  },

  // 更新个人用户信息
  updateUserInfo: async (info) => {
    // 如果没有上传头像,就删除avatar字段 就不更新了
    if (info.image == "") delete info.image;
    return UserModel.updateOne({ _id: info.id }, info)
      .then((res) => {
        return UserModel.findOne({ _id: info.id });
      })
      .catch((err) => {
        console.log("修改失败了", err);
      });
  },

  // 获取用户列表
  getUserList: async ({ pageSize = 10, pageNum = 1, keyword = "" }) => {
    return {
      code: 200,
      msg: "获取成功",
      data: {
        pageNum: pageNum,
        pageSize: pageSize,
        total: await UserModel.find({
          username: { $regex: keyword },
        }).countDocuments(),
        userList: await UserModel.find({ username: { $regex: keyword } })
          .select("-password")
          .skip((pageNum - 1) * pageSize)
          .limit(pageSize),
      },
    };
  },

  // 添加用户
  addUser: async (info) => {
    return UserModel.find({ username: info.username }).then((res) => {
      console.log("res", res);
      if (res.length) {
        return { code: 500, msg: "用户名已存在" };
      } else {
        UserModel.create(info);
        return { code: 200, msg: "添加成功", data: { userInfo: info } };
      }
    });
  },

  // 删除用户
  deleteUser: async (info) => {
    return UserModel.deleteOne({ _id: info.id }).then((res) => {
      console.log(res, "res");
      if (res.deletedCount) {
        return { code: 200, msg: "删除成功" };
      } else {
        return { code: 500, msg: "删除失败" };
      }
    });
  },

  // 更新用户信息
  updateUser: async (info) => {
    if (info.password == "") delete info.password;
    return UserModel.updateOne({ _id: info._id }, info)
      .then((res) => {
        console.log(res, "res");
        if (res.modifiedCount) {
          return { code: 200, msg: "更新成功" };
        } else {
          return { code: 500, msg: "更新失败" };
        }
      })
      .catch((err) => {
        console.log(err);
      });
  }

5. グラフィカルな管理

Navicat の 料金 (特定のサイトにアクセスしてクラック版のチュートリアルをインストールできます)  https://www.navicat.com.cn/

 

おすすめ

転載: blog.csdn.net/m0_46846526/article/details/132173635