Der er en række problemer her, som du sandsynligvis løber ind i.
For det første er teams en array-egenskab, men du tildeler et objekt til det. Du skal gøre noget som dette:
var user = new users({
userID: id, //give the id of the next user in Dbase
userName: userName,
userEmail: 'userEmail',
teams:[],
socialMedias: [{socialMediaType: socialMediaID}]
});
For det andet, hvis socialMediaType sendes ind som en funktionsparameter, kan du ikke bruge den, som du gør. Du skal gøre noget som dette:
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]
});
For det tredje vil din findOne ikke fungere, som den er. Ud fra hvad jeg kan forstå om din hensigt her, har du brug for noget som dette:
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 for det fjerde vil selv det ikke fungere, fordi du synkront returnerer bruger fra en metode, der udfører og asynkron drift. Der er forskellige måder at løse det på, men du kan starte med at læse op om løfter eller overføre en tilbagekaldsfunktion til searchUser.