質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

2410閲覧

node.js&MongoDBでinsertが適切に出来ない

pyon_214

総合スコア8

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2020/09/02 07:44

編集2020/09/02 07:46

当方プログラミング初学者で、node.jsとMongoDBの学習を教材を使って進めているのですが、MongoDBの接続・データ挿入部分でエラーが発生し、Googleで調べても自力では解決出来なかったため有識者の皆様からご教示いただきたくご質問させていただいた次第でございます。

初学者故の初歩的なミスがあるかもしれませんがご容赦ください。

エラーメッセージ

PS D:\nodejs\weblog> node ./lib/database/insert-sample.js connect successfully D:\nodejs\weblog\node_modules\mongodb\lib\utils.js:668 throw error; ^ TypeError: Cannot read property 'db' of undefined at D:\nodejs\weblog\lib\database\insert-sample.js:65:19 at D:\nodejs\weblog\node_modules\mongodb\lib\utils.js:665:9 at D:\nodejs\weblog\node_modules\mongodb\lib\mongo_client.js:224:23 at connectCallback (D:\nodejs\weblog\node_modules\mongodb\lib\operations\connect.js:366:5) at D:\nodejs\weblog\node_modules\mongodb\lib\operations\connect.js:599:14 at connectHandler (D:\nodejs\weblog\node_modules\mongodb\lib\core\sdam\topology.js:285:11) at cb (D:\nodejs\weblog\node_modules\mongodb\lib\core\sdam\topology.js:683:18) at D:\nodejs\weblog\node_modules\mongodb\lib\cmap\connection_pool.js:354:13 at D:\nodejs\weblog\node_modules\mongodb\lib\core\sdam\server.js:282:16 at Object.callback (D:\nodejs\weblog\node_modules\mongodb\lib\cmap\connection_pool.js:351:7)

insert-sample.js

insert

1var CONNECTION_URL = require("../../config/mongodb.config.js").CONNECTION_URL; 2var DATABASE = require("../../config/mongodb.config.js").BATABASE; 3var OPTIONS = require("../../config/mongodb.config.js").OPTIONS; 4var MongoClient = require("mongodb").MongoClient; 5 6// posts, users, privileges 7var insertPosts = function (db) { 8 return Promise.all([ 9 db.collection("posts").insertMany([{ 10 url: "/2017/05/hello-nodejs.html", 11 published: new Date(2017, 4, 2), 12 updated: new Date(2017, 4, 2), 13 title: "ようこそ Node.js の世界へ", 14 content: "Node.js は おもしろい!", 15 keywords: ["Node.js"], 16 authors: ["Yuta Sato"] 17 }, { 18 url: "/2017/06/nodejs-basic.html", 19 published: new Date(2017, 5, 12), 20 updated: new Date(2017, 5, 12), 21 title: "Node.js の 基本", 22 content: "ちょっと難しくなってきた!?", 23 keywords: ["Node.js"], 24 authors: ["Yuta Sato"] 25 }, { 26 url: "/2017/07/advanced-nodejs.html", 27 published: new Date(2017, 7, 8), 28 updated: new Date(2017, 7, 8), 29 title: "Node.js 応用", 30 content: "Node.js で Excel ファイルが触れるなんて!!", 31 keywords: ["Node.js"], 32 authors: ["Yuta Sato"] 33 }]), 34 db.collection("posts") 35 .createIndex({ url: 1 }, { unique: true, background: true }) 36 ]); 37}; 38 39var insertUsers = function (db) { 40 return Promise.all([ 41 db.collection("users").insertOne({ 42 email: "yuta.sato@sample.com", 43 name: "Yuta Sato", 44 password: "qwerty", //"qwerty", // "77d1fb804f4e1e6059377122046c95de5e567cb9fd374639cb96e7f5cc07dba1" 45 role: "owner" 46 }), 47 db.collection("users") 48 .createIndex({ email: 1 }, { unique: true, background: true }) 49 ]); 50}; 51 52var insertPrivileges = function (db) { 53 return Promise.all([ 54 db.collection("privileges").insertMany([ 55 { role: "default", permissions: ["read"] }, 56 { role: "owner", permissions: ["readWrite"] } 57 ]), 58 db.collection("privileges") 59 .createIndex({ role: 1 }, { unique: true, background: true }) 60 ]); 61}; 62 63MongoClient.connect(CONNECTION_URL, OPTIONS, (error, client) => { 64 console.log("connect successfully") 65 var db = client.db(DATABASE); 66 Promise.all([ 67 insertPosts(db), 68 insertUsers(db), 69 insertPrivileges(db) 70 ]).catch((error) => { 71 console.log(error); 72 }).then(() => { 73 client.close(); 74 }); 75});

mongodb.config.js

mongodb.config.js

1module.exports = { 2 CONNECTION_URL: "mongodb://user:user@localhost:27017/weblog", 3 DATABASE: "weblog", 4 OPTIONS: { 5 family: 4, 6 useUnifiedTopology: true, 7 useNewUrlParser: true 8 } 9 };

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そもそもMongoClient.connect()は成功しているのですか?
肝心のエラーチェックすらしていないようですが。

投稿2020/09/02 11:27

technocore

総合スコア7337

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pyon_214

2020/09/02 15:20

ご回答ありがとうございます。 どうやらユーザーの登録が出来ていなかったようです。 assert.equal(null,error)にてエラーチェックをした上でdb.createuser({user:"user", pwd:"user", roles:["root"]})を設定したところ、無事作動しました。 もう一つお聞きしたいことがあるのですが、このユーザーというのはそれぞれのデータベースに登録されるものなのでしょうか? database(weblog)にswitchする前にcreateuserコマンドを使ったにも関わらず作動してしまったのでその点が疑問です。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問