2016-10-12 4 views
0

私は独自のIDでサブ文書を選択する方法を知らない
expressjsを作成しようとしました。 "localhost:3000/api/parent /:parent_id/child/:child_id "公式のMoogose文書はhereであり、コードは
var doc = parent.children.id(id);
ですが、コンソールにはCannot read property 'id' of undefinedまたはnullが返されます。
は、ここにコード mongoose:idでサブ文書を選択する方法

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")); 





私expressjsあるので、そのIDでサブ文書を選択する方法を、任意のヘルプは、私が見つけることができる最初の問題は、あなたが両方のコレクションを作成しているということである

答えて

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); 

最後に、マングースのマニュアルに掲載の例は、2つのオプションの最初のためです。

+0

Thanks、私はChildSchemaの '{collection:"子 "}"を削除した後もconsole.logにput: "TypeError:未定義の 'id'プロパティを読み取ることができません。 // localhost:3000/api/parent/57fe6e26d0505e1974ac0b68/child/57fe6e26d0505e1974ac0b6b "これはIDがObjectIdでなければならないためですか? – Yadi

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を参照してください。

関連する問題