(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【MongoDB】コマンドから非対話形式で利用する

スポンサーリンク

はじめに

NoSQLの筆頭として以下記事でも軽く触れたMongoDBですが

タイトルの通りコマンドから直接DBを操作することも可能なのでテキストに追記する感覚でDBに格納&検索ができます。

本記事ではデータをコマンドから操作する方法を前提知識を補足しながら記載しています。

コマンド実行環境
  • Debian GNU/Linux 9
  • MongoDB shell version: 3.2.11

MongoDBのインストール

apt-getにてインストール可能です。

# apt-cache show mongodb
Package: mongodb
...
Description-en: object/document-oriented database (metapackage)
 MongoDB is a high-performance, open source, schema-free document-oriented data store that's easy to deploy, manage and use. It's network accessible, written in C++ and offers the following features:
 ....
# apt-get install mongodb
...
# which mongo
/usr/bin/mongo

インストール後は自動で起動しています。

# systemctl status mongodb
● mongodb.service - An object/document-oriented database
   Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor prese
   Active: active (running) since ...
     Docs: man:mongod(1)
 Main PID: 8971 (mongod)
   CGroup: /system.slice/mongodb.service
           mq8971 /usr/bin/mongod --unixSocketPrefix=/run/mongodb --config /e..
.. instance-1 systemd[1]: Started An object/document-oriented da

MongoDBをシェルから利用

mongoコマンドで接続を行い以下でデータベースを作成できます。

> use test
switched to db test

そこで例えば以下コマンドを打てばデータは格納され

> db.user.insert({name:'taro', age:15});
> db.user.insert({name:'hanako', age:18});

以下コマンドで格納データが全て表示され

> db.user.find()

以下のように検索条件を絞ることもできます。(検索条件はage>=18)

> db.user.find({age:{$gte:18}})
{ "_id" : ObjectId("5eb6b85e97a67a3c31c2f326"), "name" : "hanako", "age" : 18 }

MongoDBをシェル外から利用

--evalを付ければ対話形式ではなくコマンドが実行でき、標準出力にて結果が確認できます。

# mongo --eval "db.user.find()"
MongoDB shell version: 3.2.11
connecting to: test
{ "_id" : ObjectId("5eb6b84d97a67a3c31c2f325"), "name" : "taro", "age" : 15 }
{ "_id" : ObjectId("5eb6b85e97a67a3c31c2f326"), "name" : "hanako", "age" : 18 }

注意事項としては$マークをそのまま入力すると以下のようにエラーとなるので

# mongo --eval "db.user.find({age:{$gte:18}})"
MongoDB shell version: 3.2.11
connecting to: test
xx E QUERY    [thread1] SyntaxError: invalid property id @(shell eval):1:19

以下のように\$と入力する必要があります。

# mongo --eval "db.user.find({age:{\$gte:18}})"
MongoDB shell version: 3.2.11
connecting to: test
{ "_id" : ObjectId("5eb6b85e97a67a3c31c2f326"), "name" : "hanako", "age" : 18 }

終わりに

JSON形式でデータを格納しているのでNode.js等と相性の良いMongoDBですが、コマンドからさくっとデータを投入して同じくコマンドから検索結果を取得できるので単体でも利用可能ですね。