LoginSignup
2
0

More than 3 years have passed since last update.

【ドットインストール】Node.js講座の仕様変更点【 #15 ドキュメントを挿入してみよう】

Last updated at Posted at 2020-06-03

はじめに

ドットインストールのNode.js講座は最終更新日が2014年のままアーカイブされていて、講座内容そのままやってもうまくいかない箇所がある。

「» #15 ドキュメントを挿入してみよう」
の章では、Node.jsのMongoClientの仕様が変わっているため、エラーが出てしまった。新しい仕様に対応した正しいやり方をメモしておく。

mongoDBの公式ドキュメントでは、バージョン3以降、MongoClient.connectにリターンする値がDBからClientに変わったと書かれている。

「What’s new in 3.0
・MongoClient.connect now returns a Client instead of a DB.」

mongoDBに割り当てられているアドレスを知る

MongoClient.connectを記述する時、第一引数に、mongoDBに割り当てられているアドレスを記述する必要がある。
デフォルトでmongoDBに割り当てられているアドレスを知るには、ターミナルで「mongo」コマンドを入力し、mongoDBがどのアドレスにconnectしているか調べる

スクリーンショット 2020-06-03 20.15.28.png

講座のままだとエラーになる箇所

ドットインストールの講座のコードのまま実行すると、ターミナルに「node mongo.js」を入力した際に以下のエラーが返ってくる。

TypeError: db.collection is not a function

原因は、MongoDB 3.0以降、MongoClient.connectにリターンする値がDBからClientに変わったこと。
<ドットインストールのコードの問題箇所>

MongoClient.connect("mongodb://"+settings.host+"/"+settings.db, function(err, db) { //dbはリターンされないので引数に取れない
    if (err) { return console.dir(err); }
    console.log("connected to db");

    db.collection("users", function(err, collection) {
//dbはリターンされてないので存在しない

<MongoDB 3.0に対応したコード>


var MongoClient = require('mongodb').MongoClient

//データベースに接続する関数に渡す第一引数である、mongoDBのアドレスは、定数に格納する方がスッキリする
const url = 'mongodb://localhost:127.0.0.1:27017/myDB'

  // callbackに渡されるオブジェクトが(err, db)から(err, client)に変わった
    MongoClient.connect(url, (err, client)=> {  
  // db名を指定してdbオブジェクトを取得する必要がある
      const db = client.db('localhost:127.0.0.1:27017')

    if (err) { return console.dir(err); }
    console.log("connected to db");
    db.collection("users", function(err, collection) {
        var docs = [
            {name: "taguchi", score: 40},
            {name: "fkoji", score: 80},
            {name: "dotinstall", score: 60}
        ];
        collection.insert(docs, function(err, result) {
            console.dir(result);
        });
    });
});

データベースの確認方法

①ターミナルから確認
ターミナルに「node mongo.js」を入力すると、insertしたdocsの値が表示される

②mongoDBから確認
ターミナルに「mongo」を入力しmongoDBを起動

>show dbs;

localhost:27017 0.000GB
このデータベースに挿入したドキュメントが入っている

>show collections;

users
作成したusersコレクションが表示されている

>db.users.find();
insertしたdocsの値ががmongoDBに挿入されていると確認できる。

参考文献

Node.jsのMongoClientの仕様が変わってた
https://qiita.com/mimizq/items/76d3a948acb33881c8db

Node.jsからMongoDBに接続してみる
https://qiita.com/one-kelvin/items/c0c036f774f0b3b98ae5

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0