初めに
Node.jsでMongodbを操作したいという際にもうちょっと簡単で楽にならないかなと考えて作ったのが今回のプログラムです。楽is神。
前提
・Node.jsのインストールを済ませていること
・Mongodbのインストールを済ませていること
・npmのインストールを済ませていること
・mongodbのNode.jsのAPIをインストールしていること
環境
・さくらVPSのCentos7
・node.js v15.11.0
・npm 7.6.2
・mongodb v4.4.4
Mongodb
わかりやすいようにMongodbを操作する用のディレクトリをとりあえず作っておきましょう。
$mkdir database
$cd database
接続部分
まずはMongodbとの接続についてのファイルを作成します。
$vim mongo_connect.js
//mongo_connect.jsconstMongoClient=require('mongodb').MongoClientfunctionopen(){leturl='mongodb://ユーザー名:パスワード@localhost:27017';constconnectOptions={useNewUrlParser:true,useUnifiedTopology:true,}returnnewPromise((resolve,reject)=>{MongoClient.connect(url,connectOptions,(err,db)=>{if(err)reject(err);elseresolve(db);});});}functionclose(db){if(db)db.close();}letdb={open:open,close:close}module.exports=db;
urlについてですがユーザーを作成していた場合は以上のとおりになります。ユーザー名とパスワードを設定したとおりに入れてくださいね。
認証を設定したいという方は
こちらの記事の最後の方に書いてあるので、是非参考にしてくださいな。
またMongodbをwebサイトのデータベースとしてでもなんでも、本格的に運用したいという方は27017からポートの変更をしておいたほうがいいです。今回はテストも兼ねていたのでデフォルトのポートのままです。
クエリ部分
Mongodbにおいてもクエリと呼んでいいのかどうかはわかりませんがとにかくクエリです。
$vim insertOne.js
//insertOne.jsconstzenodb=require('./mongo_connect.js');functioninsertOne(object,col){letdatabase=null;zenodb.open().then((db)=>{database=db;constdbName=db.db("自分の使うデータベース名を入力してね!");returndbName.collection(col);}).then((collection)=>{returncollection.insertOne(object);}).catch((err)=>{console.error(err)}).finally(()=>{zenodb.close(database);})}module.exports=insertOne;
insertOne({データ名,データ},コレクション名)とすることで実行できるメソッドを用意しました。requireしている接続ファイルがzenodbですが、参考にさせていただいたQ&Aの回答者の人がそう書いていたのでそう書かせてもらいました。意味は・・・調べてみたんですがよくわからなかったっす。
念の為、参考にさせていただいたQ&Aのサイトを載せておきます。
https://stackoverflow.com/questions/37911838/how-to-use-mongodb-with-promises-in-node-js
集合部分
今回はinsertOneだけでしたが、他にも作れば当然便利になるでしょう。しかしそうしたらrequireするのがめんどくせぇ!とかなりそうなので、集合部分を予め作っておきましょう。
$vim methods.js
constinsertOne=require("./insertOne.js");letmethods={insertOne:insertOne,}module.exports=methods;
let methodsの場所にクエリをたくさん追加できるようになれば便利ですね。
最後に一応今回作ったプログラムを試しておきましょう。
使用するのは先程作ったmethodsファイル。
constinsertOne=require("./insertOne.js");letmethods={insertOne:insertOne,}methods.insertOne({name:"tekitou"},"users");module.exports=methods;
node methods.js
これでmongodbシェルにログインしてみて、対象のデータベースのコレクションの中にデータが入っていればOKです。
以上!
なにか質問があれば書いてください!わからないかもしれませんけどねw