【Dotinstall】Node.js课程的规格变更【#15 尝试插入文档】

首先

Dotinstall的Node.js课程已经被归档,最后更新日期还停留在2014年,所以即使按照课程内容进行学习,也有可能会遇到无法顺利进行的部分。

「» #15 尝试插入文件」一章中,由于Node.js的MongoClient规范已经改变,导致出现了错误。请记下适应新规范的正确方法。

在MongoDB的官方文档中,提到从版本3开始,MongoClient.connect返回的值已从数据库变为客户端。

「3.0有什么新功能
・MongoClient.connect现在返回一个Client而不是一个DB。」

了解MongoDB分配的地址。

在编写MongoClient.connect时,需要在第一个参数中指定分配给mongoDB的地址。
要查找MongoDB默认分配的地址,可以在终端输入“mongo”命令,并查看MongoDB连接到的地址。

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

如果保持讲座的状态,会发生错误的地方。

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

类型错误:db.collection 不是一个函数。

原因は、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の値が表示される

在终端上输入“mongo”来启动MongoDB,从MongoDB确认一下。

>show dbs;

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

>show collections;

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

确认可以在MongoDB中插入已经执行过插入操作的文档的值。

可以引用的资料

Node.js的MongoClient规范已经发生了变化

尝试从Node.js连接到MongoDB
https://qiita.com/one-kelvin/items/c0c036f774f0b3b98ae5

bannerAds