ここには、発生する可能性のある問題がいくつかあります。
まず、teamsは配列プロパティですが、オブジェクトを割り当てています。次のようなことをする必要があります:
var user = new users({
userID: id, //give the id of the next user in Dbase
userName: userName,
userEmail: 'userEmail',
teams:[],
socialMedias: [{socialMediaType: socialMediaID}]
});
次に、socialMediaTypeが関数パラメーターとして渡された場合、それを使用しているように使用することはできません。次のようなことをする必要があります:
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]
});
第三に、findOneはそのままでは機能しません。ここで私があなたの意図を集めることができることから、あなたはこのようなものが必要です:
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;
}
しかし第4に、非同期操作を実行するメソッドからユーザーを同期的に返すため、それでも機能しません。これを解決するにはさまざまな方法がありますが、promiseについて読むか、コールバック関数をsearchUserに渡すことから始めることができます。