Ada sejumlah masalah di sini yang mungkin Anda alami.
Pertama, tim adalah properti array, tetapi Anda menetapkan objek ke dalamnya. Anda perlu melakukan sesuatu seperti ini:
var user = new users({
userID: id, //give the id of the next user in Dbase
userName: userName,
userEmail: 'userEmail',
teams:[],
socialMedias: [{socialMediaType: socialMediaID}]
});
Kedua, jika socialMediaType diteruskan sebagai parameter fungsi, Anda tidak dapat menggunakannya seperti yang Anda lakukan. Anda perlu melakukan sesuatu seperti ini:
var socialMedias = {};
socialMedias[socialMediaType] = socialMediaID;
var user = new users({
userID: id, //give the id of the next user in Dbase
userName: userName,
userEmail: 'userEmail',
teams:[],
socialMedias: [socialMedias]
});
Ketiga findOne Anda tidak akan berfungsi apa adanya. Dari apa yang saya dapat kumpulkan dari niat Anda di sini, Anda membutuhkan sesuatu seperti ini:
function searchUser(socialMediaID, socialMediaType){
var user
var query = {};
query["socialMedias."+socialMediaType] = socialMediaID;
users.findOne(query, function(err, userFound){
if(err) return handleError(err);
user = userFound;
});
//what does MongoDb return if it does not find the document?
return user;
}
Tetapi keempat, bahkan itu tidak akan berhasil karena Anda secara sinkron mengembalikan pengguna dari metode yang melakukan dan operasi asinkron. Ada berbagai cara untuk mengatasinya, tetapi Anda bisa mulai dengan membaca tentang janji, atau meneruskan fungsi panggilan balik ke searchUser.