Тук има редица проблеми, с които вероятно ще се сблъскате.
Първо, teams е свойство на масив, но вие присвоявате обект към него. Трябва да направите нещо подобно:
var user = new users({
userID: id, //give the id of the next user in Dbase
userName: userName,
userEmail: 'userEmail',
teams:[],
socialMedias: [{socialMediaType: socialMediaID}]
});
Второ, ако socialMediaType е предаден като функционален параметър, не можете да го използвате, както правите. Трябва да направите нещо подобно:
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]
});
Трето, вашият findOne няма да работи както е. От това, което мога да разбера за вашето намерение тук, имате нужда от нещо подобно:
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;
}
Но четвърто, дори това няма да работи, защото синхронно връщате потребител от метод, който изпълнява асинхронна операция. Има различни начини за решаване на това, но можете да започнете, като прочетете за обещанията или подадете функция за обратно извикване в searchUser.