Det du försöker göra är inte möjligt eftersom det inte finns något join-uttalande på mongodb.
Du kan uppnå detta på två sätt:
1 - Av DBRefs: Ändra ditt schema till ett som inkluderar all användarinformation och inte dela upp dem i två olika scheman som du gör, se avnormaliserad . Då kan du använda Population funktion för att få alla personuppgifter.
2 - Med manuella referenser: Den andra lösningen är att göra ett andra anrop till databasen som hämtar personProfil-data med användar-id som ett filter.
Exempel 1:
På så sätt kan du få alla personers data utan ett andra anrop till 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
}
Observera att jag använder typen Schema.Types.ObjectId och inte numret . På så sätt kan du tilldela _creator ett nytt värde skicka antingen _id eller personobjektet och mungusten kommer att konvertera objektet till dess _id. Du kan till exempel lägga upp något som
{
_creator : {
_id : 123123123123,
name : 'Foo',
birthday: '0000-00-00',
profilelink: 'http://foo.bar',
email: '[email protected]'
},
title : 'Mr'
}
... och mangusten kommer att konvertera till
{
_creator : 123123123123,
title : 'Mr'
}
Exempel 2:
På så sätt normaliseras din data fortfarande och du kan få alla persondata med ett andra samtal.
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
}