Det finns ett antal problem här som du förmodligen stöter på.
För det första är teams en array-egenskap, men du tilldelar ett objekt till den. Du måste göra något så här:
var user = new users({
userID: id, //give the id of the next user in Dbase
userName: userName,
userEmail: 'userEmail',
teams:[],
socialMedias: [{socialMediaType: socialMediaID}]
});
För det andra, om socialMediaType skickas in som en funktionsparam, kan du inte använda den som du gör. Du måste göra något så här:
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]
});
För det tredje kommer din findOne inte att fungera som den är. Vad jag kan förstå om din avsikt här, behöver du något sånt här:
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;
}
Men för det fjärde kommer inte ens det att fungera eftersom du synkront återvänder användare från en metod som utför och asynkron operation. Det finns olika sätt att lösa det på, men du kan börja med att läsa på om löften eller skicka en återuppringningsfunktion till searchUser.