我不知道如何通过自己的id选择子文档。我尝试使用expressjs创建REST api," localhost:3000 / api / parent /:parent_id / child /: child_id" Moogose官方文档为here,代码为var doc = parent.children.id(id);
,但在控制台中不断返回Cannot read property 'id' of undefined
或null
。是我的快递代码
var express = require('express');
var app = express();
var mongoose=require('mongoose');
mongoose.connect('mongodb://localhost/parent');
var ChildSchema=new mongoose.Schema({
name:String
},{collection:"child"});
var ParentSchema=new mongoose.Schema({
name:String,
child:[ChildSchema]
},{collection:"parent"});
var Parent = mongoose.model('Parent', ParentSchema);
//
// var parentA=new Parent({name:"A 123",child:[{name:"A 1"},{name:"A 2"},{name:"A 3"}]});
// var parentB=new Parent({name:"B 123",child:[{name:"B 1"},{name:"B 2"},{name:"B 3"}]});
// var parentC=new Parent({name:"C 123",child:[{name:"C 1"},{name:"C 2"},{name:"C 3"}]});
// parentA.save();
// parentB.save();
// parentC.save();
app.get('/api/parent', function(req, res){
Parent.find(function(err,data){
res.json(data);
});
});
app.get('/api/parent/:parent_id/child/:child_id', function(req, res){
console.log(req.params.child_id);
/*problem here!!!!!*/
var doc = Parent.child.id(req.params.child_id);
console.log(doc);
});
app.listen(3000,console.log("localhost:3000"));
如此如何通过其id选择子文档,任何帮助将不胜感激
答案 0 :(得分:0)
我可以发现的第一个问题是,您要为子文档创建一个集合,然后将完整文档嵌入到父文档中。 我没有真正测试过,但似乎很奇怪。要么嵌入文档,要么将其引用到另一个集合。
所以:
var childSchema = new Schema({ name: 'string' });
var parentSchema = new Schema({
children: [childSchema]
})
或者:
var ChildSchema = new mongoose.Schema({
name:String
},
{ collection:"child" });
mongoose.model('Child', ChildSchema);
var ParentSchema = new mongoose.Schema({
children: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Child', default: null }]
},
{collection:"parent"});
mongoose.model('Parent', ParentSchema);
最后,mongoose文档中发布的示例是针对两个选项中的第一个。
答案 1 :(得分:0)
您首先需要找到父文档,然后才能通过children.id()获取子文件。
app.get('/api/parent/:parent_id/child/:child_id', function(req, res){
Parent.findById(req.params.parent_id, function(err, parent) {
console.log(req.params.child_id);
var doc = parent.child.id(req.params.child_id);
console.log(doc);
});
});
另请参阅此http://mongoosejs.com/docs/subdocs.html了解mor信息。