O que você está tentando fazer não é possível porque não há instrução de junção no mongodb.
Você pode conseguir isso de duas maneiras:
1 - Por DBRefs: Alterando seu esquema para um que inclua todas as informações do usuário e não os divida em dois esquemas diferentes como você está fazendo, consulte desnormalizado . Então você pode usar a População função para obter todos os dados de pessoas.
2 - Por referências manuais: A segunda solução é fazer uma segunda chamada para o banco de dados obtendo os dados de personProfile usando o ID do usuário como filtro.
Exemplo 1:
Desta forma, você pode obter os dados de todas as pessoas sem uma segunda chamada para o banco de dados.
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
}
Observe que estou usando o tipo Schema.Types.ObjectId e não o Número . Dessa forma, você pode atribuir um novo valor a _creator passando o _id ou o objeto pessoa e o mangusto converterá o objeto em seu _id. Por exemplo, você pode postar algo como
{
_creator : {
_id : 123123123123,
name : 'Foo',
birthday: '0000-00-00',
profilelink: 'http://foo.bar',
email: '[email protected]'
},
title : 'Mr'
}
... e o mangusto se converterá em
{
_creator : 123123123123,
title : 'Mr'
}
Exemplo 2:
Desta forma, seus dados ainda são normalizados e você pode obter todos os dados das pessoas com uma segunda chamada.
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
}