Това, което се опитвате да направите, не е възможно, защото няма оператор за присъединяване към mongodb.
Можете да постигнете това по два начина:
1 - От DBRefs: Промяна на вашата схема на такава, която включва цялата потребителска информация и не ги разделя на две различни схеми, както правите, вижте денормализирано . След това можете да използвате Популация функция за получаване на всички данни за лицата.
2 - Чрез ръчни препратки: Второто решение е да направите второ извикване към базата данни, като получите данните от personProfile, като използвате потребителския идентификатор като филтър.
Пример 1:
По този начин можете да получите всички данни за лица без второ извикване на базата данни.
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
}
Забележете, че използвам типа Schema.Types.ObjectId а неНомера . По този начин можете да присвоите нова стойност на _creator предаване на _id или обекта човек и mongoose ще преобразува обекта в неговия _id. Например, можете да публикувате нещо като
{
_creator : {
_id : 123123123123,
name : 'Foo',
birthday: '0000-00-00',
profilelink: 'http://foo.bar',
email: '[email protected]'
},
title : 'Mr'
}
... и мангустата ще се преобразува в
{
_creator : 123123123123,
title : 'Mr'
}
Пример 2:
По този начин вашите данни все още се нормализират и можете да получите всички данни за хората с второ обаждане.
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
}