Er zijn hier een aantal problemen waar u waarschijnlijk tegenaan loopt.
Ten eerste is teams een array-eigenschap, maar u wijst er een object aan toe. Je moet zoiets als dit doen:
var user = new users({
userID: id, //give the id of the next user in Dbase
userName: userName,
userEmail: 'userEmail',
teams:[],
socialMedias: [{socialMediaType: socialMediaID}]
});
Ten tweede, als socialMediaType wordt doorgegeven als een functieparameter, kun je het niet gebruiken zoals je doet. Je moet zoiets als dit doen:
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]
});
Ten derde zal je findOne niet werken zoals het is. Van wat ik hier van je intentie kan opmaken, heb je zoiets als dit nodig:
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;
}
Maar ten vierde, zelfs dat zal niet werken omdat je synchroon een gebruiker retourneert van een methode die asynchrone bewerking uitvoert. Er zijn verschillende manieren om dat op te lossen, maar je kunt beginnen door je in te lezen over beloften of een callback-functie door te geven aan searchUser.