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

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

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

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

Node.js

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

Express

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

Q&A

解決済

1回答

335閲覧

req.paramsをmongodbのfind()で使いたい

退会済みユーザー

退会済みユーザー

総合スコア0

MongoDB

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

Node.js

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

Express

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

0グッド

0クリップ

投稿2017/11/23 11:48

編集2017/11/24 07:24

見ていただきありがとうございます。

collection.find({title_id:req.params.id}).toArray(function(err,docs){ console.log(req.params.id); //1 console.log(docs); //[] db.close(); res.render('posts/show.ejs',{title:docs,title:req.params.sub_title}); });

req.params.idはconsole.log(req.params.id)とした際に、1と表示されるため、
値は入ってはいるのですが、console.log(docs)の中身が空になっています。
他に間違いがないかを確認するため、find({title_id:1})とした際に、DBに挿入していたデータをコンソールで確認できました。
collectionオブジェクトのfindはreq.paramsを読み込めないのでしょうか?

追記:ご協力のもと解決いたしましたので、同じように悩んでいらっしゃる方がいればですが、念のため、追記いたします。
Express4.xのリファレンスにもありますが、req.params.xはString型になるため、
MongoDBのfindでNumber型(idなど)を検索する際にそのままid:req.params.xとすると、
x=123とした場合
id(Number型):"123"(String型)となってしまい、出力できません。
なのでIDなどのNumber型を検索する際は、id:Number(req.params.x)とすることで
req.params.xをString型からNumber型に変換できます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

params.idが文字列になっていて取得できない可能性はないですかね?
ん〜パッとそのくらいしか思いつきませんでした。。。

投稿2017/11/23 14:15

TomokazuKozuma

総合スコア131

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

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

退会済みユーザー

退会済みユーザー

2017/11/23 14:52

ご回答ありがとうございます。 再度確認しましたが、文字列ではありませんでした。
退会済みユーザー

退会済みユーザー

2017/11/24 06:05

何度も申し訳ありません。気が向いたら返信いただければと思うのですが、req.paramsではなくreq.queryでしかMongoDBのfindが読み込まない?ということはないでしょうか?
TomokazuKozuma

2017/11/24 06:22

req.queryはGETメソッドからパラメータを取得、req.paramsはGET,POSTの両メソッドから取得するかの違いなのでMongoDBには影響しませんね。
TomokazuKozuma

2017/11/24 06:24

ちなみにコンソールから確認とありますが、mongoコマンドでDBにつないで確認したのでしょうか? それで確認できてプログラムから確認できない場合、繋ぐデータベースかテーブル?コレクション?を間違っている可能性があります!
退会済みユーザー

退会済みユーザー

2017/11/24 06:31

ご返事いただき恐縮です。 実際にcollection.find({title_id: 1})とした際に表示されたので、DB名などの記述ミスはないと思われます。 Express4.xのreq.paramsのリファレンスを読んだのですが、 // GET /user/tj req.params.name // => "tj" との記述がありました。 ということは、仮に/user/1となっていた際には 1ではなく、"1"と文字列になってしまうのではないかと思ったのですがいかがでしょうか?
TomokazuKozuma

2017/11/24 06:35

その可能性はありますね!けど文字列ではなかったんですよね? ん〜その場に行けばすぐ解決できそうですが笑
退会済みユーザー

退会済みユーザー

2017/11/24 07:01

function typeOf02() { 'use strict'; console.log(typeof this); } typeOf02.call(req.params.id); で再度調べ直したところ、stringとなっていました。お恥ずかしい。 req.paramsをstringをnumberに変換することはできますでしょうか?
退会済みユーザー

退会済みユーザー

2017/11/24 07:14

find({ title_id:Number(req.params.id) })としたら無事表示されました。 自分の勘違いでここまで引っ張ってしまい申し訳ありません。 御丁寧に対応していただき、TomokazuKozuma様、本当にありがとうございました。 一番最初にご提案いただいていた文字列であったのに関わらず自分が勘違いしていたため、こちらをベストアンサーにさせていただきます。
TomokazuKozuma

2017/11/24 07:38

お!よかったです!引き続き頑張って下さい!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問