Ci sono una serie di problemi che probabilmente stai riscontrando.
Innanzitutto, teams è una proprietà dell'array, ma le stai assegnando un oggetto. Devi fare qualcosa del genere:
var user = new users({
userID: id, //give the id of the next user in Dbase
userName: userName,
userEmail: 'userEmail',
teams:[],
socialMedias: [{socialMediaType: socialMediaID}]
});
In secondo luogo, se socialMediaType viene passato come parametro di funzione, non puoi usarlo come stai facendo. Devi fare qualcosa del genere:
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]
});
Terzo, il tuo findOne non funzionerà così com'è. Da quello che posso dedurre dalle tue intenzioni qui, hai bisogno di qualcosa del genere:
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;
}
Ma quarto, anche quello non funzionerà perché stai restituendo in modo sincrono l'utente da un metodo che esegue un'operazione asincrona. Esistono vari modi per risolverlo, ma puoi iniziare leggendo le promesse o passando una funzione di callback a searchUser.