Quello che stai cercando di fare non è possibile perché non c'è una dichiarazione di unione su mongodb.
Puoi ottenerlo in due modi:
1 - Per DBRefs: Modificando lo schema in uno che includa tutte le informazioni sull'utente e non le divida in due schemi diversi come si sta facendo, vedere denormalizzato . Quindi puoi utilizzare la Popolazione funzione per ottenere tutti i dati delle persone.
2 - Per riferimenti manuali: La seconda soluzione è effettuare una seconda chiamata al database ottenendo i dati personProfile utilizzando l'id utente come filtro.
Esempio 1:
In questo modo puoi ottenere i dati di tutte le persone senza una seconda chiamata al 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
}
Nota che sto utilizzando il tipo Schema.Types.ObjectId e non il Numero . In questo modo, puoi assegnare un nuovo valore a _creator passando il _id o l'oggetto persona e la mangusta convertirà l'oggetto nel suo _id. Ad esempio, puoi pubblicare qualcosa come
{
_creator : {
_id : 123123123123,
name : 'Foo',
birthday: '0000-00-00',
profilelink: 'http://foo.bar',
email: '[email protected]'
},
title : 'Mr'
}
... e la mangusta si convertirà in
{
_creator : 123123123123,
title : 'Mr'
}
Esempio 2:
In questo modo i tuoi dati sono ancora normalizzati e puoi ottenere tutti i dati delle persone con una seconda chiamata.
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
}