Hier gibt es eine Reihe von Problemen, auf die Sie wahrscheinlich stoßen werden.
Erstens ist Teams eine Array-Eigenschaft, aber Sie weisen ihr ein Objekt zu. Sie müssen etwa so vorgehen:
var user = new users({
userID: id, //give the id of the next user in Dbase
userName: userName,
userEmail: 'userEmail',
teams:[],
socialMedias: [{socialMediaType: socialMediaID}]
});
Zweitens, wenn socialMediaType als Funktionsparameter übergeben wird, können Sie es nicht so verwenden, wie Sie es tun. Sie müssen etwa so vorgehen:
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]
});
Drittens wird Ihr findOne nicht so funktionieren, wie es ist. Von dem, was ich hier über Ihre Absicht sammeln kann, brauchen Sie so etwas:
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;
}
Aber viertens funktioniert selbst das nicht, weil Sie den Benutzer synchron von einer Methode zurückgeben, die einen asynchronen Vorgang ausführt. Es gibt verschiedene Möglichkeiten, das zu lösen, aber Sie können damit beginnen, sich über Versprechungen zu informieren oder eine Rückruffunktion an searchUser.
zu übergeben