使用猫鼬的对象引用

时间:2018-07-28 05:40:02

标签: javascript html

var express = require("express");
var mongoose=require("mongoose");

// comment schema
var commentsSchema=new mongoose.Schema({
  text:String
});

var comment=mongoose.model("text",commentsSchema);

// post schema
var postsSchema=new mongoose.Schema({
  posts:String,
  texts:[
   {
    type:mongoose.Schema.Types.ObjectId,
    ref:'text'
    }
]
});

var posts=mongoose.model("post",postsSchema);

// post route
app.get('/home',function(req,res){
  posts.find({},function(err,posts){
    if(err){
      console.log(err);
    } else {
  //    console.log(posts);
      res.render("index.ejs",{posts:posts});
    }
  });
});

// post route
app.post('/home',function(req,res){
  posts.create({posts:req.body.post,username:req.user.username},function(err,post){
    if(err){
      console.log(err);
    } else {
      console.log("new post created");
      res.redirect("/home");
    }
  });
});

// comment route:- in this route i created comment pushed into post schema
app.post('/home/:id/comments',function(req,res){
  posts.findById(req.params.id,function(err,post){
    if(err){
      console.log(err);
    } else {
      var com=req.body.comment;
      var user=req.user.username;
      console.log(com);
      var com1={text:com,username:user};
      comment.create(com1,function(err,newComment){
        if(err){
          console.log("err");
        } else{
          console.log(newComment);
          post.texts.push(newComment);
          post.save();
          console.log(post);
          res.redirect("/home");
        }
      });
    }
  });

});
   
<% posts.slice().reverse().forEach(function(post){ %>
    post.texts.forEach(function(comment){
      <%= comment.text %> // error:- showing object id instead of text
    });
<% }); %>

<%= comment.text %> -----此html行显示objectId(ex:-5b5bf9afc21a414b54ab3290)而不是html页面上的注释。发布架构和注释架构是否正确关联?如果它们是为什么我在html页面上获得objectId而不是数据库中的注释的原因。

这是数据库中的注释对象

{ _id: 5b5bf9afc21a414b54ab3290,
  text: 'hey',
  username: 'yashwanth',
  __v: 0 }

这是数据库中的发布对象,其中包含注释对象的对象引用

{ texts:
   [ { _id: 5b5bf9afc21a414b54ab3290,
       text: 'hey',
       username: 'yashwanth',
       __v: 0 } ],
  _id: 5b5bf9a9c21a414b54ab328f,
  posts: 'lol',
  username: 'yashwanth',
  __v: 0 }

2 个答案:

答案 0 :(得分:4)

如果您使用猫鼬“ ref”属性,则必须将猫鼬populate查询与find查询配合使用以注释架构填充帖子架构。试试看,这肯定会解决您的问题。

答案 1 :(得分:2)

您将需要填充子架构(文本)

请仔细阅读本文档

http://mongoosejs.com/docs/populate.html#population

posts.find({}).
  populate('texts').
  exec(function (err, posts) {...
});