| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
9,474 バイト追加 、 2021年6月16日 (水) 00:04
bindIp: 0.0.0.0
</pre>
===設定===
----
*/etc/momgod.conf
*[http://docs.mongodb.org/manual/reference/configuration-options/ リファレンス]
 
 
====systemlog====
{| class="wikitable"
|-
! scope="col"| パラメータ
! scope="col"| 内容
! scope="col"| 備考
|-
| destination
| ログの送り先、fileまたはsyslogを指定
|
|-
| path
| ログを出力するファイル
|
|-
| logAppend
| trueの場合、ログを追記
|
|-
| logRotage
| ログローテーション。renameもしくはreopen
|
|-
|}
 
====storage====
{| class="wikitable"
|-
! scope="col"| パラメータ
! scope="col"| 内容
! scope="col"| 備考
|-
 
| dbPath
| データファイル保存先
|
|-
| journal enabled
| ジャーナルを使用するかどうか
|
|-
| engine
| ストレージエンジンを指定
|
|-
|
*wiredTiger:
**engineConfig:
***cacheSizeGB:
| 使用するメモリのキャッシュサイズ
|
|-
|
*wiredTiger:
**collectionConfig:
***blockCompressor:
| 格納データを圧縮できる。圧縮率を指定できる
*none:圧縮しない
*snappy:圧縮する
*zlib:snappyより高圧縮率で圧縮
|
|-
|
|
|
|-
|
|
|
|-
|
|
|
|-
|
|
|
|-
|}
 
===monogoシェルの実行===
----
)
|-
| 件数| db.collection.find().count()
|
|-
)
|-
|ドキュメントの置き換え|db.collection.replaceOne({検索条件}{更新内容})| 入れ替えられるのは1件だけdb.testCollection.replaceOne({key:"1"},{key:1, value:"a", value2:"v1"})|-| フィールド名を変更| $rename 旧Key:"新Key"| db.testCollection.updateMany({},{$rename:{value:"val1"}})|-| 配列のインデックス| フィールド名.n| {$set:{"ary.3":"hoge"}}|-| 登録または更新(upsert)| db.collection.updateOne({検索条件},{更新内容},{upsert: true})| |-|}===フィールドを新規追加===----*既存のフィールド($RaceId.Year ・・・)を接続して、新しいフィールド(_RaceId)を追加<pre>db.H1.update( {"_id": ObjectId("60a7c66cb07a3cd94da9958c") }, [ {"$set": { "_RaceId": { $concat: [ "$RaceId.Year", "-", "$RaceId.MonthDay", "-","$RaceId.JyoCD", "-","$RaceId.Kaiji", "-","$RaceId.Nichiji", "-","$RaceId.RaceNum" ] } } } ] )</pre> ==削除=={| class="wikitable"|-! scope="col"| 方法! scope="col"| コマンド! scope="col"| 例|-| 1件削除| db.collection.deleteOne({検索条件})| 複数件一致しても、削除されるのは1件|-| 複数件削除| db.collection.deleteMany({検索条件})| |-|}==集計==*findで集計はできないため、aggregationメソッドを利用する*$group に 集計対象 _id は必須*全体の集計を行うときは、_id:null とする{| class="wikitable"|-! scope="col"| 集計! scope="col"| 集計関数! scope="col"| 例|-| 最大値| $max| |-| 最小値| $min
|
|-
|平均値|$avg
|
|-
||
|
|-
|}===簡単な集計===----<pre>db.collection.aggregate([ { $match:{<検索条件>}}, { $group:{ _id::"$<集計フィールド>",<集計結果表示名>:{<集計関数>:"$集計フィールド"}}}])</pre>====基本====**$group に 指定した _id フィールドごとに集計を行う**"$フィールド名"と入力する**集計関数 $sumを指定、複数指定も可能<pre>db.getCollection("O1").aggregate([ { $match: { 'head.MakeDate.Year':{ '$gt':'2010', '$lt':'2020' }} }, { $group: { _id:'$head.MakeDate.Year', tosu: {'$sum':{ '$toInt': '$TorokuTosu' }}} }])</pre>[[File:mongo_aggregate_sum.png|600px]]====グループ化のあとに、さらに条件を適用====<pre>db.getCollection("O1").aggregate([ { $match: { 'head.MakeDate.Year':{ '$gt':'2010', '$lt':'2020' }} }, { $group: { _id:'$head.MakeDate.Year', tosu: {'$sum':{ '$toInt': '$TorokuTosu' }}} }, { $match: { 'tosu' : { '$gt': 49000 }} } ])</pre>[[File:mongo_aggregate_sum2.png|600px]] ====集計関数を複数同時に使用====<pre>db.getCollection("O1").aggregate([ { $match: { 'head.MakeDate.Year':{ '$gt':'2010', '$lt':'2020' }} }, { $group: { _id:'$head.MakeDate.Year', tosu_total: {'$sum':{ '$toInt': '$TorokuTosu' }}, tosu_max: {'$max':{ '$toInt': '$TorokuTosu' }}, tosu_min: {'$min':{ '$toInt': '$TorokuTosu' }}, tosu_avg: {'$avg':{ '$toInt': '$TorokuTosu' }} }}])</pre>[[File:mongo_aggregate_sum3.png|600px]]====グループごとの件数をカウント====*$sum:1 とする<pre>db.getCollection("O1").aggregate([ { $match: { 'head.MakeDate.Year':{ '$gt':'2010', '$lt':'2020' }} }, { $group: { _id:'$head.MakeDate.Year', tosu_total: {'$sum':{ '$toInt': '$TorokuTosu' }}, tosu_max: {'$max':{ '$toInt': '$TorokuTosu' }}, tosu_min: {'$min':{ '$toInt': '$TorokuTosu' }}, tosu_avg: {'$avg':{ '$toInt': '$TorokuTosu' }}, tosu_cnt: {'$sum':1} }}])</pre>===コレクションの結合===----*aggregationではコレクションを結合できる*$lookup を利用する<pre>db.collection.aggregate([ { $lookup:{ from: "<結合先コレクション>", localField:"<結合元の結合フィールド>", foreginField:"<結合先の結合フィールド>", as:"<結合先コレクションの別名>" }}])</pre>=====結合($lookup)=====<pre>db.RA.aggregate([ { $lookup:{ from:"SE", localField:"_RaceId", foreignField:"_RaceId", as:"SE" }}])</pre>=====検索条件を指定して結合($match)=====<pre>db.RA.aggregate([ { $match: { "_id" : ObjectId("60a7c617b07a3cd94da991b7") } }, // 検索条件 { $lookup:{ from:"SE", localField:"_RaceId", foreignField:"_RaceId", as:"SE" }}]) // 結合条件</pre>=====表示フィールドの絞り込み($project) =====<pre>db.RA.aggregate([ { $match: { "_id" : ObjectId("60a7c617b07a3cd94da991b7") } }, { $lookup:{ from:"SE", localField:"_RaceId", foreignField:"_RaceId", as:"SE" }}, { $project: { "RaceInfo":1, "JyokenInfo":1, "SE":1 }} // 表示フィールドの絞り込み]) </pre>[[File:mongo_lookup.png|600px]] ===一括高速処理(Bulk)===----*Bulk操作には大きく2つのタイプ**順次処理:登録の順番に意味があるフィールドを持つ場合に使用**並列処理:順番に関係なく処理を実行====一括登録(insert)====----<pre>var bulk = db.collection.initializeOrderBulkOp(); //Bulkの実行タイプを指定bulk.insert({<登録ドキュメント>});bulk.execute(); // Bulkの実行</pre>====一括更新(update)====----<pre>var bulk = db.H6.initializeUnorderedBulkOp();bulk.find({}).update( [{"$set": { "_RaceId": { $concat: [ "$RaceId.Year", "-", "$RaceId.MonthDay", "-","$RaceId.JyoCD", "-","$RaceId.Kaiji", "-","$RaceId.Nichiji", "-","$RaceId.RaceNum" ] } } }]);bulk.execute();</pre> ====一括登録または更新(upsert)====----====一括削除(remove)====---- ==インデックス=====作成===----*1:昇順、-1:降順<pre>db.collection.createIndex( { key1:1, key2:-1, ・・・}, { <インデックスオプション>})</pre>====インデックスオプション====----{| class="wikitable"|-! scope="col"| 項目! scope="col"| 説明! scope="col"| 備考|-| background| バックグラウンド実行| データ大量時、アプリケーションへの応答遅延防止など|-| name|インデックス名を指定
|
|-
| unique
| ユニークインデックス
| null不可
|-
| partialFilterExpression
| フィルタを作成し一致したドキュメントの部分インデックスを作成
| 以下を指定できる
*等式(key: value , $eq)
*$exists
*$gt, $gte, $lt, $lte
*$type ・$and
|-
|}
====インデックス種類====
----
{| class="wikitable"
|-
! scope="col"| 種類
! scope="col"| 説明
! scope="col"| 備考
|-
| デフォルトインデックス
| _idフィールドに作成される
| 削除できない
|-
| テキストインデックス
| 文字列コンテンツに対するテキスト検索クエリをサポートするテキストインデックスを作成
| 作成には、keyに"text"を指定する
<pre>
db.collection.createIndex({ key: "text" })
</pre>
|-
| TTLインデックス
| 特定の時間または時刻にドキュメントを自動削除するために利用する
| Date型、Date型を含む配列、expireAfterSecondsが経過したドキュメントを自動で削除する
<pre>
db.collection.createIndex({
{key: 1},
{expireAfterSeconds:<秒数>}
})
</pre>
|-
| ハッシュインデックス
| フィールド値のハッシュをインデックスにする
| ランダム分布をも持つが、値一致飲みサポート
|-
|地理的インデックス
|プレーンジオメトリ、球面ジオメトリ
|
|}
 
===確認===
----
<pre>
db.collection.getIndexes()
</pre>
===削除===
----
*上記で確認した、nameを指定する
<pre>
db.collection.dropIndex("インデックス名")
</pre>
===再構築===
----
<pre>
db.collection.reIndex()
</pre>
 
==Tips==
===stringをintに変換===
<pre>
db.getCollection('O1').find({},{tosu:{ '$toInt': '$TorokuTosu' }})
</pre>
[[File:mongo_to_into.png|500px]]
 
==プログラミング==
===[[C Sharp|C#]]===
----
*[https://mongodb.github.io/mongo-csharp-driver/2.8/apidocs/html/R_Project_CSharpDriverDocs.htm C# MongoDriver]
====Insert====
----
<pre>
using MongoDB.Driver;
:
var client = new MongoClient("mongodb://puli-mon.local");
var mongoDb = client.GetDatabase("jra");
var colH1 = mongoDb.GetCollection<JV_H1_HYOSU_ZENKAKE>("h1");
:
colH1.InsertOne(rec);
</pre>

案内メニュー