Istnieje wiele problemów, które prawdopodobnie napotkasz.
Po pierwsze, zespoły to właściwość tablicy, ale przypisujesz do niej obiekt. Musisz zrobić coś takiego:
var user = new users({
userID: id, //give the id of the next user in Dbase
userName: userName,
userEmail: 'userEmail',
teams:[],
socialMedias: [{socialMediaType: socialMediaID}]
});
Po drugie, jeśli socialMediaType jest przekazywane jako parametr funkcji, nie możesz go używać tak, jak robisz. Musisz zrobić coś takiego:
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]
});
Po trzecie, twoje findOne nie będzie działać tak, jak jest. Z tego, co udało mi się tutaj zebrać, potrzebujesz czegoś takiego:
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;
}
Ale po czwarte, nawet to nie zadziała, ponieważ synchronicznie zwracasz użytkownika z metody, która wykonuje operację asynchroniczną. Istnieje wiele sposobów rozwiązania tego problemu, ale możesz zacząć od przeczytania o obietnicach lub przekazania funkcji zwrotnej do searchUser.