Apa yang Anda coba lakukan tidak mungkin karena tidak ada pernyataan bergabung di mongodb.
Anda dapat mencapainya dengan dua cara:
1 - Oleh DBRefs: Mengubah Skema Anda menjadi skema yang menyertakan semua info pengguna dan tidak membaginya menjadi dua skema berbeda seperti yang Anda lakukan, lihat didenormalisasi . Kemudian Anda dapat menggunakan Populasi berfungsi untuk mendapatkan semua data orang.
2 - Dengan referensi Manual: Solusi kedua adalah membuat panggilan kedua ke database untuk mendapatkan data personProfile menggunakan userid sebagai filter.
Contoh 1:
Dengan cara ini Anda bisa mendapatkan semua data orang tanpa panggilan kedua ke 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
}
Perhatikan bahwa saya menggunakan jenis Schema.Types.ObjectId dan bukan Nomor . Dengan cara ini, Anda dapat menetapkan nilai baru ke _creator melewati _id atau objek orang dan luwak akan mengonversi objek ke _id-nya. Misalnya, Anda dapat memposting sesuatu seperti
{
_creator : {
_id : 123123123123,
name : 'Foo',
birthday: '0000-00-00',
profilelink: 'http://foo.bar',
email: '[email protected]'
},
title : 'Mr'
}
... dan luwak akan berubah menjadi
{
_creator : 123123123123,
title : 'Mr'
}
Contoh 2:
Dengan cara ini data Anda tetap normal dan Anda bisa mendapatkan semua data orang dengan panggilan kedua.
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
}