我正在使用平均堆栈(mongo / mongoose,ember,angular,node)。
数据库包含2个架构
var ChildSchema = new Schema({
childName: {
type: String,
required: true,
trim: true
}
});
var ParentSchema = new Schema({
parentName: {
type: String,
required: true,
trim: true
},
child: {
type: Schema.ObjectId,
ref: 'Child'
}
});
mongoose.model('Parent', ParentSchema);
mongoose.model('Child', ChildSchema);
有一个html form
允许用户创建一个新的Parent
,该表单有一个选择框,其中填充了存储在数据库中并由findChildren()
检索的子项功能
HTML在这里:
<section data-ng-controller="ParentController" data-ng-init="findChildren()" >
<form name="parentForm" class="form-horizontal col-md-6" role="form" data-ng-submit="create(parentForm.$valid)" novalidate>
<div class="form-group" ng-class="{ 'has-error' : submitted && parentForm.config.$invalid }">
<label for="child" class="col-md-2 control-label">child</label>
<div class="col-md-9">
<select ng-model="parent.child" ng-options="child as child.childName for child in childs"></select>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-3 col-md-9">
<button mean-token="'create-submit'" type="submit" class="btn btn-info">Submit</button>
</div>
</div>
</form>
</section>
html form
将子项的名称显示为列表中的可选项,当用户按下提交按钮时,节点应用程序中的控制器会收到正确的父对象ID。这是控制器代码
create: function(req, res) {
var parent = new Parent(req.body);
parent.save(function(err) {
if (err) {
return res.status(500).json({
error: 'Cannot save the parent'
});
}
res.json(parent);
});
}
问题是我在尝试显示表中的父项列表时无法显示childName。这是HTML。显示所有父母的其他信息
<section data-ng-controller="DevicesController" data-ng-init="findParents()">
<table border="1" class="mytable">
<tr>
<td>oject</td>
<td>Parent Name</td>
<td>Child</td>
</tr>
<tr ng-repeat="parent in parents">
<td>{{parent}}</td>
<td>{{parent.parentName}}</td>
<td>{{parent.child.childName}}</td>
</tr>
</table>
</section>
期望parent.child.childName将显示引用对象的childName。它返回null。如果我显示&#39; parent.child&#39;,它将显示objectID
例如:
我有一个叫
ChildA
的孩子。当我查看html表单以创建父项时,我将输入ParentA作为名称,并从列表中选择ChildA。
当我按下提交时,将创建新的父对象。
当我查看父列表时,显示的表应显示
ParentA
和ChildA
的行。现在它显示
ParentA
和空白
答案 0 :(得分:0)
parent.child
会返回正确的objectid
,如果您想获得引用的详细信息,则需要使用populate
。
我没有看到findParents
的相关代码,您基本上会执行以下操作:
child.findOne({"_id": req.params.id}).populate('parent').exec(function (err, child) {
if (err) {
res.status(403).json({
"status": "403",
"data": "Forbidden"
});
} else {
res.status(200).json({
"status": "200",
"message": "Success",
"data" : child
});
}
});