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

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

ただいまの
回答率

90.47%

  • Node.js

    2421questions

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

  • MongoDB

    280questions

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

Node+mongooseにおける、複数データベースの連携について

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 238

Shun0722

score 7

大変初歩的な内容で恐縮でしうが、どなたかお教えいただけると大変助かります (冗長な質問で申し訳ありません。。。)

1 MongoDBにおいて、二つのデータベースの連携させようとしています。例として、「フルーツ」コレクションと「ノート」コレクションを下記のようなスキーマで用意しています。

<Fruit>

//SCHEMA
var fruitSchema  =   new mongoose.Schema({
   name:     String,
   origin: String,
   note:[
      {
         type: mongoose.Schema.Types.ObjectId,
         ref:  "Note"
      }
      ]
});

module.exports  =   mongoose.model("Fruit", fruitSchema);

<Note>

var mongoose    = require("mongoose");

//SCHEMA
var noteSchema  =   mongoose.Schema({
   note:            String,
   author:        String,
});

module.exports  =   mongoose.model("Note", noteSchema);


2 フルーツの方に、ノートのデータを格納するフォームを表示させようとして次のようなコードを記述いたしました。

//NEW - show form to create new portfolio company
router.get("/new", function(req,res){
   Fruit.findById(req.params.id, function(err,fruit){
     if(err){
         console.log(err);
     }else{
         res.render("notes/new",{fruit: fruit});
     }
   })
});

3 フォームは、下記のようにしているのですが、

<% include ../partials/header %>

<div class="container">
    <div class =row>
        <h1 style="text-align: center;">Add a Note </h1>
        <div style="width: 30%; margin: 25px auto;">
            <form action="/fruits/<%= fruit._id %>/notes" method="POST">

                <div class="form-group">        
                    <input class="form-control" type = "text" name = "note[note]" placeholder="note">
                </div>

                <div class="form-group">        
                    <input class="form-control" type = "text" name = "note[author]" placeholder="author">
                </div>

                <div class="form-group">
                    <button class="btn btn-lg btn-primary btn-block">Submit!</button>
                </div>

            </form>
            <a href="/fruits">Back to the Fruits</a>

        </div>
    </div>

</div>

<% include ../partials/footer %>

4 下記のようなエラーが出てしまい進みません。。。。

TypeError: /home/ubuntu/workspace/Fruits/views/notes/new.ejs:7
    5|         <h1 style="text-align: center;">Add a Note </h1>
    6|         <div style="width: 30%; margin: 25px auto;">
 >> 7|             <form action="/fruits/<%= fruit._id %>/notes" method="POST">
    8|             
    9|                 <div class="form-group">        
    10|                     <input class="form-control" type = "text" name = "note[note]" placeholder="note">

Cannot read property '_id' of null
    at eval (eval at compile (/home/ubuntu/workspace/Fruits/node_modules/ejs/lib/ejs.js:618:12), <anonymous>:22:31)
    at returnedFn (/home/ubuntu/workspace/Fruits/node_modules/ejs/lib/ejs.js:653:17)
    at tryHandleCache (/home/ubuntu/workspace/Fruits/node_modules/ejs/lib/ejs.js:251:36)
    at View.exports.renderFile [as engine] (/home/ubuntu/workspace/Fruits/node_modules/ejs/lib/ejs.js:482:10)
    at View.render (/home/ubuntu/workspace/Fruits/node_modules/express/lib/view.js:135:8)
    at tryRender (/home/ubuntu/workspace/Fruits/node_modules/express/lib/application.js:640:10)
    at EventEmitter.render (/home/ubuntu/workspace/Fruits/node_modules/express/lib/application.js:592:3)
    at ServerResponse.render (/home/ubuntu/workspace/Fruits/node_modules/express/lib/response.js:1008:7)
    at /home/ubuntu/workspace/Fruits/routes/notes.js:12:14
    at /home/ubuntu/workspace/Fruits/node_modules/mongoose/lib/model.js:4527:16
    at Query._completeOne (/home/ubuntu/workspace/Fruits/node_modules/mongoose/lib/query.js:1883:12)
    at Immediate.Query.base.findOne.call (/home/ubuntu/workspace/Fruits/node_modules/mongoose/lib/query.js:1943:10)
    at Immediate.<anonymous> (/home/ubuntu/workspace/Fruits/node_modules/mquery/lib/utils.js:116:16)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)

解消するために色々試してみたのですが、どなたか解消方法をお教えいただけないでしょうか?
よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

単に Fruit.findById(req.params.id の結果がnullということではないでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Node.js

    2421questions

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

  • MongoDB

    280questions

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