MongoDBのよくある基本操作

はてなブックマーク - MongoDBのよくある基本操作
LINEで送る
Pocket

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の列を全部削除する

まとめ

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

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

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

では、また!

はてなブックマーク - MongoDBのよくある基本操作
LINEで送る
Pocket

Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close