mongodbにjoinステートメントがないため、実行しようとしていることは不可能です。
これは2つの方法で実現できます。
1- DBRefによる: スキーマをすべてのユーザー情報を含むスキーマに変更し、現在のように2つの異なるスキーマに分割しないでください。
2-手動参照による: 2番目の解決策は、データベースを2回呼び出して、ユーザーIDをフィルターとして使用してpersonProfileデータを取得することです。
例1:
このようにして、データベースを2回呼び出すことなく、すべての人のデータを取得できます。
var personSchema = Schema({
_id : Number,
name : String,
birthday: Date,
profilelink: String,
email: String
});
var storySchema = Schema({
_creator : { type : Schema.Types.ObjectId, ref: 'Person' },
title : String
});
Story
.find()
.populate(['_creator'])
.exec(function(err, stories) {
//do your stuff here
}
タイプSchema.Types.ObjectIdを使用していることに注意してください 番号ではありません 。このようにして、 _creatorに新しい値を割り当てることができます _idのいずれかを渡す または人物オブジェクト マングースはオブジェクトをその_idに変換します。たとえば、次のように投稿できます
{
_creator : {
_id : 123123123123,
name : 'Foo',
birthday: '0000-00-00',
profilelink: 'http://foo.bar',
email: '[email protected]'
},
title : 'Mr'
}
...そしてマングースはに変換されます
{
_creator : 123123123123,
title : 'Mr'
}
例2:
このようにして、データは引き続き正規化され、2回目の呼び出しですべての人のデータを取得できます。
Story
.find()
.exec(function(err, stories) {
var arrayLength = stories.length;
for (var i = 0; i < arrayLength; i++) {
var story = stories[i];
personProfile.findById(story._creator, function (err, person) {
story._creator = person;
}
};
// do your stuff here
}