Det, du forsøger at gøre, er ikke muligt, fordi der ikke er nogen join-erklæring på mongodb.
Du kan opnå dette på to måder:
1 - Af DBRefs: Ændring af dit skema til et, der inkluderer alle brugeroplysninger og ikke opdeler dem i to forskellige skemaer, som du gør, se denormaliseret . Så kan du bruge befolkningen funktion for at få alle persondata.
2 - Ved manuelle referencer: Den anden løsning er at foretage et andet kald til databasen og hente personProfile-data ved at bruge bruger-id'et som et filter.
Eksempel 1:
På denne måde kan du få alle personers data uden et andet opkald til databasen.
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
}
Bemærk, at jeg bruger typen Schema.Types.ObjectId og ikke Nummeret . På denne måde kan du tildele en ny værdi til _creator sende enten _id eller personobjektet og mongoose vil konvertere objektet til dets _id. For eksempel kan du poste noget som
{
_creator : {
_id : 123123123123,
name : 'Foo',
birthday: '0000-00-00',
profilelink: 'http://foo.bar',
email: '[email protected]'
},
title : 'Mr'
}
... og mangusten vil konvertere til
{
_creator : 123123123123,
title : 'Mr'
}
Eksempel 2:
På denne måde er dine data stadig normaliseret, og du kan få alle persondata med et andet opkald.
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
}