To, o co se snažíte, není možné, protože na mongodb neexistuje žádný příkaz join.
Můžete toho dosáhnout dvěma způsoby:
1 – Podle DBRefs: Změnu schématu na takové, které obsahuje všechny informace o uživateli a nerozděluje je do dvou různých schémat, jak to děláte, viz denormalizované . Pak můžete použít Populace funkce pro získání všech údajů o osobách.
2 – Podle manuálu: Druhým řešením je provést druhé volání do databáze a získat data personProfile pomocí id uživatele jako filtru.
Příklad 1:
Tímto způsobem můžete získat data všech osob bez druhého volání do databáze.
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
}
Všimněte si, že používám typ Schema.Types.ObjectId a nikoli Číslo . Tímto způsobem můžete přiřadit novou hodnotu _creator předáním buď _id nebo objekt osoby a mongoose převede objekt na jeho _id. Můžete například zveřejnit něco jako
{
_creator : {
_id : 123123123123,
name : 'Foo',
birthday: '0000-00-00',
profilelink: 'http://foo.bar',
email: '[email protected]'
},
title : 'Mr'
}
... a mangusta se převede na
{
_creator : 123123123123,
title : 'Mr'
}
Příklad 2:
Tímto způsobem se vaše data stále normalizují a můžete získat všechna data o osobách druhým hovorem.
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
}