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

bannerAds