尽管保存在数据库中,但仅检索了一半的猫鼬模式

Only half of mongoose schema being retrieved, although saved on database

我有一个 mongoose 模式,它似乎工作正常,可以将信息正确保存或更新到数据库中,但是在尝试访问信息时,并不是所有信息都被检索到。缺少文本 属性。

架构如下:

var mongoose = require("mongoose");

var commentSchema = new mongoose.Schema({
    text: String,
    author: {
        id: {
            type: mongoose.Schema.Types.ObjectId,
            ref: "User"
        },
        username: String
    }
});


var Comment = mongoose.model("Comment", commentSchema);
module.exports = Comment;    

这就是检索评论的方式(campground/show。评论的作者通过得很好,但是当我 console.log

<% Campground.comments.forEach(function(comment){ %>

 <div>
    <p> <%= comment.author.username %> </p>
    <p> <%= comment.text %> </p>
</div>
<% } %>

Campground传入路线如下:

var express = require("express");
var router = express.Router({mergeParams: true});
var Campground = require("../models/campground");

router.get("/:id", function(req, res){
    Campground.findById(req.params.id).populate("comments", "author").exec(function(err, foundLoc){
        if(err){
            console.log(err);
        } else {
            res.render("campgrounds/show", {Campground: foundLoc});
        }
    });
});

此外,当我在 mongodb.com 上查看数据库时,模式显示正确并且文本字段填充了创建的数据。

以下是数据库中显示的内容

_id: ObjectId("5d720e6b71e33a05148676c7")
text: "THis is text!!!!"
__v:0
author: Object
   id:ObjectId("5d702a801d8f5e036de14042")
   username: "Bubbles"

这就是我在 console.log(评论):

时得到的结果
 author: { id: 5d702a801d8f5e036de14042, username: 'Bubbles' },
  _id: 5d7239e8c72e4d040ebbda1f }

由于某种原因不再检索文本。

您在 commnets 模型中仅选择了 author 字段。如果您需要 comments 模型的所有字段,请使用 populate("comments") 而不是 populate("comments", "author")

如果 Campground 模型有 2 个参考模型,commentsauthor 那么

Campground.findById(req.params.id).populate("comments").populate( "author").exec(function(err, foundLoc){
        if(err){
            console.log(err);
        } else {
            res.render("campgrounds/show", {Campground: foundLoc});
        }
    });

你可能想看看文档https://mongoosejs.com/docs/populate.html#populating-multiple-paths