如果是我,我能理解MongoDB

首先

这是我勉强整理的东西

※ 如果是我,我能理解。

MongoDB的概述

    • ドキュメント思考

 

    • NoSQL:データ構造決めずにデータ管理する(スキーマーレス)

 

    公式Web

专业术语

    • データーベース

 

    • コレクション

RDBでいうテーブル

ドキュメント

RDBでいうレコード
オブジェクト形式 {field: val, field: val…}
データ構造関係なくオブジェクトを保管できる

环境搭建

想要营造一个环境

    • Ubuntu 18.0.4 LTS

 

    その他の環境の方はこちらを参照

在本地使用

在本地进行环境设置

# パッケージ管理システムが使用する公開鍵をインポート
$ wget -qO-https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add-

# エラーが出た場合、必要なライブラリをインストール
$ sudo apt-get install gnupg

# バージョンのリストファイル作成
$ echo  "deb [arch = amd64、arm64] https://repo.mongodb.org/apt/ubuntu bionic / mongodb-org / 4.2 multiverse"  | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list

# ローカルパッケージのリロード
$ sudo apt-get update

# MongoDBのインストール
$ sudo apt-get install -y mongodb-org

# MongoDBの起動
$ sudo systemctl start mongod

# MongoDBの起動確認
$ sudo systemctl status mongod

# MongoDBを使ってみる
$ mongo

# ※ 再起動後も起動したい場合
$ sudo systemctl enable mongod

用的。

使用Docker和Docker Compose进行环境配置。

version: '3'
services:
  # MongoDBのサービス
  mongo:
    image: mongo:latest
    container_name: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: password
      MONGODB_DATA_DIR: /data/db
    ports:
      - 27017:27017
    volumes:
      - ./db:/data/db
      - ./configdb:/data/configdb
  # MongoDBのGUIサービス
  mongo-express:
    image: mongo-express:latest
    container_name: mongo-express
    restart: always
    links:
      - mongo
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: password

尝试使用MongoDB

# コンテナへアクセス
$ docker-compose run --rm mongo bash

# MongoDBの対話モード
$ mongo admin -u root -p
パスワード入力(ymlファイルで設定した通りpasswordを入力)

命令 (Ming ling)

操作数据库

    データベース一覧
> show dbs;
    データベースの作成 or 切り替え
> use データベース名;

※ 在创建数据库时,由于还没有集合,所以它被认为是不存在的。

    データベースの削除
> db.dropDatabase();
    現在のデータベースの状態
> db.stats();

可以查看当前选择的数据库的详细信息,例如名称等。

操作收藏

    コレクションの作成
> db.createCollection("コレクション名");
    コレクションの削除
<!DOCTYPE html>
<html lang="jp">
  <head>
> db.コレクション名.drop();
    コレクション名の変更
> db.古いコレクション名.renameCollection("新しいコレクション名");
    コレクション一覧
> show collections;

操作文件

基本操纵

    ドキュメントの作成
> db.コレクション名.insert({
    field: val,
    field: val,
       .
       .
       .
 });

因为没有模式,可以在同一个集合中保存不同文档的结构。

    javascriptでドキュメントの作成

我正在学习中文。

> for (val i = 0; i < 10; i++) {
    db.コレクション名.insert({
      num: i
    });
  }

结果是以下文件被登记:
_id自动确定为唯一值。

{ "_id" : ObjectId("5e626f3ef980343ff158c2a0"), "num" : 0 }
{ "_id" : ObjectId("5e626f3ef980343ff158c2a1"), "num" : 1 }
{ "_id" : ObjectId("5e626f3ef980343ff158c2a2"), "num" : 2 }
{ "_id" : ObjectId("5e626f3ef980343ff158c2a3"), "num" : 3 }
{ "_id" : ObjectId("5e626f3ef980343ff158c2a4"), "num" : 4 }
{ "_id" : ObjectId("5e626f3ef980343ff158c2a5"), "num" : 5 }
{ "_id" : ObjectId("5e626f3ef980343ff158c2a6"), "num" : 6 }
{ "_id" : ObjectId("5e626f3ef980343ff158c2a7"), "num" : 7 }
{ "_id" : ObjectId("5e626f3ef980343ff158c2a8"), "num" : 8 }
{ "_id" : ObjectId("5e626f3ef980343ff158c2a9"), "num" : 9 }
    全件削除
> db.コレクション名.remove({});
    条件を指定して削除
> db.コレクション名.remove(条件);

以下是一个例子:

# idが1であるドキュメントの削除
> db.コレクション名.remove({id: 1})

表达

    全件表示
> db.コレクション名.find();
    表示したいフィールドの指定

只需提供一个选项,用中文将以下内容重新表达:将要显示在关键字段的名称为“key”,将“val”指定为true或1。

> db.コレクション名.find({field1: true, field2: 1, ...});
    表示するフィールドの除外

在中文中,可以这样表达:
将要排除的字段名指定为key,并将val设为false或1。

> db.コレクション名.find({}, {field1: false, field2: 0, ...})

表达条件的调整

    昇順にソート
> db.コレクション名.find({}).sort({field: 1})
    降順にソート
> db.コレクション名.find({}).sort({field: -1})
    limit指定(表示する件数を指定)
> db.コレクション名.find({}).limit(数字)
    先頭の行だけ表示
> db.コレクション名.findOne({})
    オフセット指定
> db.コレクション名.find({}).skip(数字)

指定的数字表示从头开始要跳过的行数,并显示数字之后的行。

展示指定文件

    一致するドキュメントの表示
> db.コレクション名.find({field: val});
    条件を指定したドキュメントの表示
> db.コレクション名.find({field: {条件: 数字}});

请关闭门。

请关上门。

> db.コレクション名.find({field: {$gte: 50}});
50以上のvalをもつドキュメントが表示される

条件列表

条件意味$eq等しい(val == 数字)$ne等しくない(val != 数字)$gte以上(val >= 数字)$gtより大きい(val > 数字)$lte以下(val <= 数字)$ltより小さい(val < 数字)
    正規表現を使ったドキュメントの表示
> db.コレクション名.find({field: /正規表現/});

※ 可以使用 JavaScript 正则表达式

显示具有复杂条件的文档

    AND
> db.コレクション名.find({field1:条件, field2:条件,...});
    OR
> db.コレクション名.find({$or: [{field1:条件},{field2:条件},...]});
    IN

显示与指定字段中的[val1, val2, …]数组内的值匹配的文档。

> db.コレクション名.find({field: {$in: [val1, val2, ...]}});
    指定したフィールドを持つドキュメントを表示
> db.コレクション名.find({field: {$exists: true}});

当将{$exists: false}设置为true时,将显示不具备指定字段的文档。

整个文档的信息

    特定のフィールドの値を表示(射影)
> db.コレクション名.distinct(field);
    ドキュメント数のカウント
> db.コレクション名.count();

编辑文件

    フィールドの更新 or 追加
> db.コレクション名.update({field1: val1}, {$set: {field2: val2}});

field1和val1表示了筛选条件。

field2表示了要更新的字段,val2表示要更新的值。

如果不加上$set,注意会把它替换掉。
只对提取的第一条进行替换。

    条件に一致するドキュメントが存在していれば更新、なければ作成
> db.コレクション名.update({field1: val1}, {field2: val2}, {upsert: true})

※ 与 $set 的不同之处在于它会更新与条件匹配的所有文档。

通过在第三个参数中指定{upsert: true},

    条件に一致する全フィールドの更新
> db.コレクション名.update({field1: val1}, {$set: {field2: val2}}, {multi: true});

※需要修改的对象是集合中具有field1: val1的文档。

    値を元に更新する場合
> db.コレクション名.update({field1: val1}, {$inc: {field2: val2}});

将原始值与val2相加并更新

    フィールドの名前を変更
> db.コレクション名.update({field1: val1}, {$rename: {field2: "new_field"}});

将field2的名称更改为new_field。

    フィールドの削除
> db.コレクション名.update({field1: val1}, {$unset: {field2: ""}});

删除field2

对索引进行操作

    メリット

通过在字段上创建索引,可以加快数据的搜索速度。

    デメリット

每次添加数据都需要分配适当的索引,反之可能导致效率低下。

显示索引

> db.コレクション名.getIndexes();

添加索引

# 昇順にインデックスを付与する場合
> db.コレクション名.createIndex({インデックス名: 1})

# 降順にインデックスを付与する場合
> db.コレクション名.createIndex({インデックス名: -1})

唯一标识的指定

通过指定索引为唯一,可以禁止数据重复。

只需一个选项:通过在索引中指定唯一性,可以防止数据重复。

> db.コレクション名.createIndex({インデックス名: 1}, {unique: true})

删除索引

# 昇順のインデックス
> db.コレクション名.dropIndex("インデックス名_1")

# 降順のインデックス
> db.コレクション名.dropIndex("インデックス名_-1")

如果忘记是按升序还是降序排列的话,可以通过getIndexes()来确认。

备份和恢复

备份

$ mongodump -d データベース名

当前目录将创建一个名为”dump”的文件夹。

复原 (fù

$ mongorestore --drop

添加“–drop”选项后,会删除现有的数据库并替换为备份。

广告
将在 10 秒后关闭
bannerAds