2016-06-18 3 views
0

私はMEAN Stackを初めて使用しています。ノードJを使用してアプリケーションを開発しています。マングースノードJs 2つのコレクションを結合する

私は2つのコレクションを持っているがstoriesは、値の配列ですstory_idのリストである、Personスキーマで

var personSchema = Schema({ 
 
    _id: Number, 
 
    name: String, 
 
    age: Number, 
 
    stories: { 
 
    type: Array, 
 
    ref: 'Story' 
 
    } 
 
}); 
 

 
var storySchema = Schema({ 
 
    _creator: { 
 
    type: Number 
 
    }, 
 
    story_id: String, 
 
    fans: [{ 
 
    type: Number 
 
    }] 
 
}); 
 

 
var Story = mongoose.model('Story', storySchema); 
 
var Person = mongoose.model('Person', personSchema);

、と言います。私は彼らの物語の詳細もすべての人のデータをリストする必要があります。

助けてください私は、 Person.find().populate("stories");
を使用していた。しかし、それはエラーをスローし、

{ 
    [CastError: Cast to ObjectId failed 
    for value "26747261" 
    at path "_id" 
    ] 
    message: 'Cast to ObjectId failed for value "26747261" at path "_id"', 
    name: 'CastError', 
    kind: 'ObjectId', 
    value: 26747261, 
    path: '_id', 
    reason: undefined 
} 

答えて

1

あなたがCastErrorを得ている理由は、あなたが個人スキーマに意図したとおりに、あなたが物語のIDのリストを格納していないということです。

var personSchema = Schema({ 
    ... 
    stories : { type: Array, ref: 'Story' } 
}); 

代わりにあなたがそれを変更する必要があります。

var personSchema = Schema({ 
    ... 
    stories : [{ type: Schema.Types.ObjectId, ref: 'Story' }] 
}); 

また、以下のことに注意してください(母集団についてのdocumentationから)

ObjectId、Number、String、およびバッファは、参照として使用するために有効です。

関連する問題