MongoDB快查表

简要概述

MongoDB = ドキュメント指向のDB

ドキュメント = 構造化されたデータのこと

RDBのレコードに相当する
これを単位としてデータを扱う
ドキュメントは、主キーとして _id を必ず持つ
ドキュメントはJSONのように扱える(内部的にはBSON)
データは型付けされる(BSON互換)

コレクション = データの集まり

RDBのテーブルに相当する(ただしスキーマは存在しない)
SQLのような複雑なデータ操作はできない
検索機能としては柔軟に対応できる

企業(MongoDB Inc.)が開発し、オープンソースで公開されている

有料版が存在し、セキュリティ強化などの追加機能とサポートが受けられる
その他、コンサルや教育も受け付けているとのこと

GNU APGLライセンス
クロスプラットフォーム
C++実装
スケーリング/クラスタリングに対応している
スクリプト言語としてJavaScriptを採用している
復数の言語のドライバ(バインディング)を提供

引入

请参考各个平台的官方介绍,以了解关于导入方法的详细说明。

安装

在OSX的情况下,可以通过brew来安装。

$ brew update
$ brew install mongodb --with-openssl

在Linux的情况下,您可以选择使用包管理器或从.rpm等文件进行安装。

在CentOS 6.x中,您需要注册存储库。

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

之后通过Yum。

$ sudo yum install mongodb-org

启动

使用mongod命令启动服务器。

$ mongod
$ service mongod start

对于OSX,在默认情况下,数据会放在/data/db/目录下,因此必须创建此目录并进行权限设置,否则会失败。关于安装后的启动方法,可以参考官方说明。

MongDB命令行工具

Mongo Shell = mongoコマンドで起動する対話型のコンソールのこと。
JavaScript(風のスクリプト)を使う。

# mongodに接続
$ mongo

可以通过help命令显示帮助,也可以使用Tab键进行补全。

这个SQL和Mongo的对照表十分清晰易懂。

显示状态

show <表示内容> でDBの状態を表示できる。

show dbs            // DBの一覧
show collections    // 使用中のDB中のコレクション一覧
show users          // ユーザの一覧
show roles          // ロールの一覧

选择/创建数据库。

通过使用,可以切换并利用数据库。
如果指定的数据库不存在,则会创建新的数据库。

// DB(somedb)を選択
use somedb

添加/删除集合

通过使用createCollection()函数可以新建一个集合。
此外,如果使用insert函数插入文档到不存在的数据库中,该集合也将自动创建。

// 利用中のDBにコレクションfooを追加
db.createCollection('foo')

如果要删除集合,可以使用drop()函数。

// コレクションfooを削除
db.foo.drop()

塞入

在Shell中,就像JavaScript一样,可以将任意对象赋值给变量。

// insertの結果をresultに代入
result = db.foo.insert({...})

插入

使用insert()方法。
此外还存在insertOne()和insertMany()作为简写形式。

在插入时,该文件的直接下层会自动包含 _id。

// abcコレクションにドキュメントを挿入
db.abc.insert({
    'name' : 'Alpha',
    'file' : {
        'name' : 'test file',
        'text' : '...',
    }
)

寻找

可以使用find()方法。
同时还存在findOne()等缩写形式。

进行整体搜索

如果要进行全文搜索,则只需调用find()函数。

// 単にfindすると全件を取得する
db.abc.find()

设定条件

如果要指定条件,请将其作为find()的参数传递。

// トップレベルの項目nameを検索する
db.abc.find({
    'name' : 'Alpha'
})

若要指定层级,请用点号分隔条件的键进行表示。

// file.nameを検索する
db.abc.find({
    'file.name' : 'test file',
})

如果要在数组中搜索元素,

'<配列自身のキー>.<配列の要素の任意のキー>' : '<配列の要素の値>'
// 各ドキュメントがこんな構造だったとして:
//  {
//      'list' : [
//          {'name' : 'item1', ...}
//          {'name' : 'item2', ...}
//          {'name' : 'item3', ...}
//      ]
//  }


// listの中にある、名前がAlphaの要素を検索する場合は:
db.abc.find({
    'list.name' : 'item1'
})

进行比较

如果在搜索条件中使用运算符的话,
如果你在搜索条件中使用运算符的话,

<键>: { <运算符> : ‘<比较值>’ }

// file.sizebytes > 1024
db.abc.find({
    'file.sizebytes' : { $gt: 1024 }
})

算符可以通过常数来指定,例如$gt。(列表)

演算子意味$eq==$ne!=$lt<$lte<=$gt>$gte>=$in配列に含まれる$nin配列に含まれない

以多种条件进行搜索

如果是AND的情况,只需要简单地列举条件即可。

db.abc.find({
    'name' : 'alpha',
    'file.name' : 'test file',
})

在OR的情况下,需要指定常量$or。

db.abc.find({
    $or : [
        { 'name'        : 'alpha'       },
        { 'file.name'   : 'test file'   }
    ],
})

指定条件(计数)

如果只想获取件数,请使用count()函数。

// nameがalphaのドキュメントの件数を返す
db.abc.count({
    'name' : 'alpha',
})

排序

对于使用find()进行搜索的结果,执行sort()。
排序条件是1表示升序,-1表示降序。

// serialの降順でソートする
db.abc.find().sort({
    'serial' : -1
})

使用正则表达式

可以使用正则表达式作为搜索条件。
可以使用与JS相同的文字表达方式来编写。

// nameがa/Aからはじまるドキュメントを検索
db.abc.find({
    'name'  : /^a.*/i
})

更新

可以使用update()。此外,还有updateOne()和updateMany()作为简写形式存在。

无论如何,无法更新_id。
此外,在MongoDB中,写操作保证是以文档为单位的原子操作。

对文件进行部分更新

update(
    <検索条件>,
    {
        $set : <更新内容>,
        $currentData : <現在時刻を更新する項目>,
    },
    {
        multi: <復数更新の有無>,
    }
)
// nameがalphaのドキュメントを探し、特定の値を更新する
// 更新の際にupdated_atを現在時刻に更新する
db.abc.update({
    {
        'name' : 'alpha',
    },
    {
        $set : {
            // find()と同様にドット区切りで指定できる
            'file.name' : 'some filename updated',
        },
        $currentDate : {
            'updated_at' : true,
        },
    },
})

更新整个文件。

update(
    <検索条件>,
    <置換えるドキュメント>,
)
// nameがalphaのドキュメントを探し、まるごと置換える
db.abc.update({
    {
        'name' : 'alpha',
    },
    {
        'name' : 'alpha updated',
        // ...
    },
})

删除

remove(
    <検索条件>,
    {
        justOne : <削除対象を1件に限定する場合はtrue>,
    },
)

将全部删除

传递空对象到remove()函数将删除所有条目。

如果在没有参数的情况下调用,会出错并且不会被删除。

// 全件削除する
db.abc.remove({})

指定条件删除

// nameがalphaのドキュメントを削除する
db.abc.remove({
    'name' : 'alpha',
})

关于WriteResult()

Mongo会返回WriteResult()来作为带有写入操作的处理返回值。
它具有以下属性,可用于识别结果。

プロパティ内容nInserted挿入された件数nMatched更新対象となった件数nModified更新された件数nRemoved削除された件数

特殊数据的处理相关事项

日期

对于日期的处理方式有两种。

    • 文字列で保持する方法: Date() を使う

 

    Unixエポックミリ秒で保持する方法: ISODate()を使う

没有调查的情况下,似乎后者更容易进行比较/计算,但变为标准时间是一个难点。

二进制

关于尺寸上限,官方有针对不同环境的数据大小上限规定,但从外观上来看,似乎是以TB为单位的数字,所以在正常使用情况下应该没有问题。

设定

使用Mongo Shell来设置DB和集合的个别配置,类似于传统的RDB。

整体配置会被记录在配置文件(如mongod.conf)中,在服务器启动时进行加载。
如果通过命令直接启动,则可以使用–config选项指定配置。

$ mongod --config /path/to/mongod.conf

设置文件以YAML格式编写。

索引

索引的概念与其他数据库相同,它们被用于提高搜索速度和设置唯一约束。

Mongo会自动为文档设置_id,并为该_id分配索引。
由于该索引具有唯一约束,因此无法插入重复的_id。

在中国指数的创建/确认/删除是通过命令来完成的。

// abcコレクションのfile.nameに対して、昇順かつユニークのインデックスを作成
db.abc.createIndex({
    { 'file.name'   : 1 },
    { 'unique' : true   },
})

// 設定済のインデックスを確認
db.some.getIndexes()


// インデックスを削除
db.some.dropIndex(
    { 'file.name' : 1 }
)

用户/角色/认证

在Mongo中,权限是按照用户和角色的单位进行管理的。

创建管理员用户

首先,在没有特别指定认证的情况下启动Mongo,设置管理数据库和管理员。

use admin
db.createUser({
    user: "userAdmin",
    pwd: "some_password",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})

关闭服务器端(mongod),在启用认证的情况下重新启动。
认证功能可以通过–auth选项或配置文件指定。

$ mongod --auth

从现在开始,用户的创建和管理需要进行管理员用户的认证。
除非由管理员用户分配权限的用户进行认证,否则将无法访问数据库。

要进行认证,可以在客户端连接时指定,或者使用auth()函数。

// 接続時に認証する
$ mongo -u 'userAdmin' -p 'some_password' --authenticationDatabase 'admin'
// 接続後に認証する
db.auth('userAdmin', 'some_password')

创建普通用户

与管理用户一样,可以使用createUser()函数创建用户。可以指定多个目标角色和数据库。

db.createUser(
  {
    user: "alpha",
    pwd: "some_password",
    roles: [ { role: "readWrite", db: "alpha" },
             { role: "read", db: "bravo" } ]
  }
)

关于卷的种类

可以从Mongo标准内置角色中选择并指定角色。
也可以自行创建角色。

待办事项

    • コマンドの詳細

 

    • 設定項目の詳細

 

    • 暗号化

通信の暗号化(TLS/SSL)
ストレージの暗号化

レプリケーション
シャーディング(クラスタリング)
API/ドライバ

请参照以下内容:

    • Wikipedia – MongoDB

MongoDB(公式)

Getting Started with MongoDB (MongoDB Shell Edition)¶

The MongoDB 3.4 Manual

mongo Shell Quick Reference
Data Types in the mongo Shell
MongoDB CRUD Operations
Reference
Indexes
Security

广告
将在 10 秒后关闭
bannerAds