Wat je probeert te doen is niet mogelijk omdat er geen join-statement is op mongodb.
U kunt dit op twee manieren bereiken:
1 - Door DBrefs: Verander je schema in een schema dat alle gebruikersinformatie bevat en splits ze niet in twee verschillende schema's zoals je doet, zie gedenormaliseerd . Dan kun je de Bevolking gebruiken functie om alle persoonsgegevens te krijgen.
2 - Door handmatige verwijzingen: De tweede oplossing is om een tweede aanroep te doen naar de database om de personProfile-gegevens te krijgen met behulp van de gebruikers-ID als filter.
Voorbeeld 1:
Op deze manier kunt u alle persoonsgegevens krijgen zonder een tweede oproep naar de database.
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
}
Merk op dat ik het type Schema.Types.ObjectId . gebruik en niet het nummer . Op deze manier kunt u een nieuwe waarde toewijzen aan _creator het doorgeven van de _id of het persoonobject en de mangoest converteert het object naar zijn _id. U kunt bijvoorbeeld iets posten als
{
_creator : {
_id : 123123123123,
name : 'Foo',
birthday: '0000-00-00',
profilelink: 'http://foo.bar',
email: '[email protected]'
},
title : 'Mr'
}
... en de mangoest wordt omgezet in
{
_creator : 123123123123,
title : 'Mr'
}
Voorbeeld 2:
Op deze manier zijn je gegevens nog steeds genormaliseerd en kun je alle persoonsgegevens krijgen met een tweede oproep.
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
}