尽管保存在数据库中,但仅检索了一半的猫鼬模式
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 个参考模型,comments
和 author
那么
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
我有一个 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 个参考模型,comments
和 author
那么
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