Lo que está tratando de hacer no es posible porque no hay una declaración de unión en mongodb.
Puede lograr esto de dos maneras:
1 - Por DBRefs: Cambiando su esquema a uno que incluya toda la información del usuario y no los divida en dos esquemas diferentes como lo está haciendo, vea desnormalizado . Luego puede usar la Población función para obtener todos los datos de las personas.
2 - Por referencias manuales: La segunda solución es hacer una segunda llamada a la base de datos obteniendo los datos de personProfile usando el ID de usuario como filtro.
Ejemplo 1:
De esta manera, puede obtener los datos de todas las personas sin una segunda llamada a la base de datos.
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 estoy usando el tipo Schema.Types.ObjectId y no el Número . De esta forma, puedes asignar un nuevo valor a _creator pasando el _id o el objeto persona y la mangosta convertirá el objeto a su _id. Por ejemplo, puedes publicar algo como
{
_creator : {
_id : 123123123123,
name : 'Foo',
birthday: '0000-00-00',
profilelink: 'http://foo.bar',
email: '[email protected]'
},
title : 'Mr'
}
... y la mangosta se convertirá en
{
_creator : 123123123123,
title : 'Mr'
}
Ejemplo 2:
De esta manera, sus datos aún se normalizarán y podrá obtener todos los datos de las personas con una segunda llamada.
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
}