MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come eseguire una query utilizzando dot( . ) tramite Mongoose in Node.js e Come aggiungere un array vuoto

Ci sono una serie di problemi che probabilmente stai riscontrando.

Innanzitutto, teams è una proprietà dell'array, ma le stai assegnando un oggetto. Devi fare qualcosa del genere:

var user = new users({
    userID: id, //give the id of the next user in Dbase
    userName: userName, 
    userEmail: 'userEmail',
    teams:[],
    socialMedias: [{socialMediaType: socialMediaID}]
});

In secondo luogo, se socialMediaType viene passato come parametro di funzione, non puoi usarlo come stai facendo. Devi fare qualcosa del genere:

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]
});

Terzo, il tuo findOne non funzionerà così com'è. Da quello che posso dedurre dalle tue intenzioni qui, hai bisogno di qualcosa del genere:

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;
}

Ma quarto, anche quello non funzionerà perché stai restituendo in modo sincrono l'utente da un metodo che esegue un'operazione asincrona. Esistono vari modi per risolverlo, ma puoi iniziare leggendo le promesse o passando una funzione di callback a searchUser.