サイトアイコン KOKENSHAの技術ブログ

MongoDBのよくある基本操作

MongoDBはみなさん、使っていますか?

noSQLの中では、定番のテータベースですね。

私は、数年前から、 MEAN Stack (MongoDB、Express.js、Angular.js、Node.js)でMongoDBを使い始めました。

その後、MongoDBの会社も上場しましたよね。

https://finance.yahoo.com/quote/MDB/

リレーショナルDBと違って、MongoDBがjsonの形データを保管します。もちろん、CRUDの操作もできます。

SQLは使いませんが、複雑な検索もできます。

JavaScriptのエコシステムでは、jsonデータそのまま、DBからバックエンド、フロントエンド共通で操作、使用できるので

非常に理解しやすいスキーマになります。

私も、好んでJavaScriptのエコシステムを選んで使っています。

(もちろん、昔は、LAMPとRDBの人間でもありますが)

今回の記事は、MongoDBを使うときに、よく登場する操作をご紹介します。

ときとき、ここでコピペして使うこともあります。笑

mongoDBのシェルで操作するものです!https://docs.mongodb.com/manual/mongo/

目次

基本概念

簡単にMongoDBとRDBの用語を比較します。

MongoDB RDB
データベース データベース
コレクション テーブル
ドキュメント 行(レコード)
フィールド

Collection:コレクションは「テーブル」のようなものです。

Document:ドキュメントは「レコード一行」のようなものです。

Field:フィールドは「列」のようなものです。

この3つの概念(言葉)がよく登場しますので、イメージを持っておくと便利です。

演算子

一般的な演算子 MongoDBで 説明
< $lt  little than 右辺より小さい {number:{$lt:100} }
<= $lte little then or equal 右辺以下 {number:{$lte:100} }
> $gt greater than 右辺より大きい {number:{$gt:100} }
>= $gte greater than or equal 右辺以上 { number:{$gte:100} }
!= $ne not equal 等しくない { name:{$ne:’suzuki’} } suzukiではない人
存在 $exists フィールド(列)自体の存在チェック db.example.find({ hoge:{$exists:false} })
OR $or $orで指定する条件のいずれかを満たすものを抽出 db.example.find({$or:[{like:’apple’},{like:’orange’}]})

全件抽出

注意:下記のコマンドは可能な限り、正確さを確認しておりますが、完全に動作することを保証するものではありません。

下記コマンドをご自身の責任で、確認した上、実行してください。

例:ユーザーの全件を抽出する

db.users.find({})

例:男性のユーザーを抽出する

db.users.find({"gender":"male"})

dbはデータベース、usersはユーザー「テーブル」

findは英語の通り、「探す」。後ろは条件で、gender==maleといったような「気持ち」で。

フィールド「列」を削除する

mongoDBを使うときに、最初からガチガチcollection「テーブル」のfield「列」を決めずに、試行錯誤で構築していく場合もあります。

そのとき要らないフィールド「列」を削除したい時があります。

db.example.update({},{$unset: {field_to_go:1}}, {multi: true})

field_to_goというフィールド「列」をコレクションにある全てのドキュメントから削除されます。(その列がなくなる)

フィールド名を変える

db.mycollection.update({},{$rename:{"name.additional":"name.last"}},false,true)

name.additional –> name.last に変更する

あるいは

db.mycollection.updateMany( {}, { $rename: {"name.additional":"name.last" } } )

フィールド名が「空」の行を削除する

//remove empty field name
db.mycollection.find({}).forEach(function(document) {
    delete document[''];
    db.mycollection.save(document);
})

フィールド「列」を追加

//add field
db.words.update(
  {},
  {$set:
     {
    "language_type" : "英語"
     }
  },false,true
)

wordsというコレクション「テーブル」に全てのドキュメント「行」にlanguage:’英語’を追加します。

配列の列を追加する

////フィールド追加
db.activities.update(
  {},
  {$set:
     {
        “likes" : []
     }
  },false,true
)

activitiesというコレクション「テーブル」に全てのドキュメント「行」にlikes:[]を追加します。likesはフィールド名、その中に入るのは配列です。

ドキュメント「行」を削除する

//// remove document
db.example.update({target:''},{$unset:{field_to_go:1}},{multi: true});

targetというフィールドが空であれば、その集合から、field_to_goの列を全部削除する

まとめ

最初は慣れる前に、戸惑うことが多いですが

慣れれば、割としっくりくるものなので、

また、随時更新、追加していきます。

では、また!

モバイルバージョンを終了