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

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

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

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

Node.js

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

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

1回答

674閲覧

MongoDBからデータを取得して、配列とするには?

退会済みユーザー

退会済みユーザー

総合スコア0

MongoDB

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

Node.js

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

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2017/11/20 09:35

勉強のため、Node.js(express使用)とMongoDB(mongoose使用)を使って、フォームから打ち込まれた値をMongoDBに保存し、MongoDBから保存されたデータを呼び出したいのですが、データベースからの呼び出す方法がわからず、頭を抱えております。

Javascript

1//app.js 2var express = require('express'), 3 bodyParser = require('body-parser'), 4 methodOverride = require('method-override'), 5 morgan = require('morgan'), 6 app = express(), 7 post = require('./routes/post'); 8 9app.set('views', __dirname + '/views'); 10app.set('view engine', 'ejs'); 11 12// middleware 13app.use(bodyParser()); 14app.use(methodOverride('_method')); 15app.use(morgan()); 16 17// routing 18app.get('/', post.index); 19 20app.get('/posts/:id([0-9]+)', post.show); 21 22app.get('/posts/new', post.new); 23 24app.post('/posts/create', post.create); 25 26

Javascript

1//post.js 2var mongoose = require('mongoose'); 3var Schema = mongoose.Schema; 4var UserSchema = new Schema({ 5 title: String, 6 body:String 7}); 8mongoose.model('User',UserSchema); 9 10mongoose.connect('mongodb://localhost/sample_db'); 11 var User = mongoose.model('User'); 12 var user = new User(); 13 14 15var posts = [];//←ここにmongodbのuserコレクションのデータを配列で渡したい。 16 17exports.index = function(req,res){ 18 res.render('posts/index',{posts:posts}); 19}; 20 21exports.show = function(req,res){ 22 res.render('posts/show',{post:posts[req.params.id]}); 23}; 24 25exports.new = function(req,res){ 26 res.render('posts/new'); 27}; 28 29exports.create = function(req,res){ 30 user.title = ""; 31 user.body = ""; 32 user.title = req.body.title; 33 user.body = req.body.body; 34 35 user.save(function(err) { 36 if (err) { console.log(err); } 37 console.log('conected'); 38}); 39 res.redirect('/'); 40};

Javascript

1//index.ejs 2<% include ../header %> 3<h1>Posts</h1> 4<ul> 5<% for (var i=0; i<posts.length; i++) { %> 6<li> 7 <a href="/posts/<%= i %>"><%= posts[i].title %></a> 8 <!--<a href="/posts/<%= i %>/edit">[Edit]</a>--> 9 <form method="post" action="/posts/<%= i %>?_method=DELETE"> 10 <!--<input type="submit" value="del">--> 11 <!--<input type="hidden" name="_method" value="delete">--> 12 <input type="hidden" name="id" value="<%= i %>"> 13 <input type="hidden" name="_csrf" value="<%= csrftoken%>"> 14 </form> 15</li> 16<% } %> 17</ul> 18<p><a href="/posts/new">Add new</a></p> 19<% include ../footer %>

Javascript

1//show.ejs 2<% include ../header %> 3<h1><%= post.title %></h1> 4<p><%= post.body %></p> 5<p><a href="/">Go Back</a></p> 6<% include ../footer %>

Javascript

1//new.ejs 2<% include ../header %> 3<h1>Add new</h1> 4<form method="post" action="/posts/create"> 5<input type="text" name="title"> 6<input type="text" name="body"> 7<input type="submit" value="add!"> 8<input type="hidden" name="_csrf" value="<%= csrftoken%>"> 9</form> 10 11<p><a href="/">Go Back</a></p> 12<% include ../footer %>

dotinstallのレッスン動画で作成したもので学習しています。
データベースへのアクセス、保存はできてはいるのですが、正しいのかどうかの判断が現状ついておりません。
post.jsのpostsにデータベースのデータを配列で渡す方法と、データベースへの保存方法の評価をいただければ助かります。
ここまで読んでいただいたかたありがとうございました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず保存できているかの確認方法として2つあります。

・1番簡単な方法ですと、データベースを直接見ることです。

mongoDBをインストールしているサーバーまたはローカルのコンソール上でmongoと打つとmongoDBニアクセスできます。

そのあとuse sample_dbとしてデータベースを洗濯し、
db.users.find();
と打つと保存したデータが表示されます。

・2番目はソースコード上から取得する方法です。
UserSchema.find()で取得できます。この結果をpostsに渡してconsole.log()なりviewに渡して表示させてあげればいいかと思います。

投稿2017/11/23 01:12

TomokazuKozuma

総合スコア131

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

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

退会済みユーザー

退会済みユーザー

2017/11/23 07:48

ご教授いただいた通り、まずdbで直接確認し、db.users.find()の結果をres.renderで渡しました。 無事、表示もできるようになりました。ありがとうございました。
退会済みユーザー

退会済みユーザー

2017/11/23 08:03

本当に助かりました!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問