Il y a un certain nombre de problèmes ici que vous rencontrez probablement.
Premièrement, teams est une propriété de tableau, mais vous lui affectez un objet. Vous devez faire quelque chose comme ceci :
var user = new users({
userID: id, //give the id of the next user in Dbase
userName: userName,
userEmail: 'userEmail',
teams:[],
socialMedias: [{socialMediaType: socialMediaID}]
});
Deuxièmement, si socialMediaType est transmis en tant que paramètre de fonction, vous ne pouvez pas l'utiliser comme vous le faites. Vous devez faire quelque chose comme ceci :
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]
});
Troisièmement, votre findOne ne fonctionnera pas tel quel. D'après ce que je peux comprendre de votre intention ici, vous avez besoin de quelque chose comme ceci :
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;
}
Mais quatrièmement, même cela ne fonctionnera pas car vous renvoyez de manière synchrone l'utilisateur à partir d'une méthode qui effectue une opération asynchrone. Il existe différentes façons de résoudre ce problème, mais vous pouvez commencer par vous renseigner sur les promesses ou en passant une fonction de rappel dans searchUser.