不确定我想做的事情是否可行。
我想显示' name'的值。通过从引用引用用户架构(模型)的注释架构(模型)的文章文档中检索数据,在我的用户架构(模型)中的属性。
'物品'参考'评论'引用'用户'持有' user.name'我想要检索的价值。
我的控制器代码,用于按ID数据检索文章并填充“作者”#39;和评论'字段看起来像这样:
Article.findById(req.params.id)
.populate('author')
.populate('comments')
.exec(function(err, article){
if(err){
return req.flash('error', 'Unable to display article.');
} else {
res.render('articles/show', {
article: article
});
}
});
我的文章架构(模型)包含一条评论'这样的财产:
...
comments: [
{
type: Schema.Types.ObjectId,
ref: "Comment"
}
],
...
我的评论架构(模型)包括“作者”和#39;这样的财产:
...
text: String,
author:
{
type: Schema.Types.ObjectId,
ref: "User"
},
...
用户架构(模型)具有“'名称'包含我想在视图中显示的值的属性(EJS)。
所以,到目前为止,我一直无法找到显示它的方法,可能是因为没有其他查询我无法做到。
我循环浏览了#article; article.com&#39;数组并使用<%= comment.text %>
成功显示评论文字,但我无法找到显示&#39;名称的方法。来自&#39;用户&#39;注释模式(模型)中引用的模式(模型)。
我很感激任何关于我的错误的见解。
答案 0 :(得分:0)
有可能。你要做的是人口众多。
简单地做
$fields = implode(",", array_keys($arr));
$values = implode(",", array_values($arr));
$query = "INSERT INTO Table1 (".$fields.") VALUES (".$values.")";
在您看来,对于每条评论,您都会执行类似
的操作Article.findById(req.params.id).populate({
path: 'comments',
populate: {
path: 'author'
}
}).exec(function(err, article){
if (err)
return req.flash('error', 'Unable to display article.');
res.render('articles/show', { article: article });
});
有关详细信息,请查看此link。
答案 1 :(得分:0)
你必须做深度人口
Article.findById(req.params.id).populate({
path: 'article',
populate:{
path: 'comments',
populate: {
path: 'user'
}
}
}).exec(function(err, article){
if (err)
return req.flash('error', 'Unable to display article.');
res.render('articles/show', { article: article });
});
答案 2 :(得分:0)
对深度人口的进一步研究并没有为我提供答案。这就是我所做的。
我修改了我的评论架构并创建了'id','username'&amp; 'name'属性/字段如下:
....
var Schema = mongoose.Schema;
var commentSchema = new Schema({
text: String,
author: {
id:
{
type: Schema.Types.ObjectId,
ref: "User"
},
username: String,
name: String
},
....
可能是DRY违规,但它让我可以获取我需要显示的数据。
我的查询填充了评论和作者字段:
Article.findById(req.params.id)
.populate('comments')
.populate('author')
.exec(function(err, article){
if(err){
console.log(err);
return req.flash('error', 'Unable to display article.');
} else {
res.render('articles/show', {
article: article
});
}
});
我怀疑人口密集是最好的答案,但时间有时迫使我们继续前进。希望这可能会帮助处于类似情况的人。感谢Mikey和Ayush的帮助。