MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como fazer uma consulta usando dot( . ) através do Mongoose no Node.js e como adicionar um array vazio


Há uma série de problemas aqui que você provavelmente está enfrentando.

Primeiro, teams é uma propriedade de array, mas você está atribuindo um objeto a ela. Você precisa fazer algo assim:
var user = new users({
    userID: id, //give the id of the next user in Dbase
    userName: userName, 
    userEmail: 'userEmail',
    teams:[],
    socialMedias: [{socialMediaType: socialMediaID}]
});

Segundo, se socialMediaType for passado como um parâmetro de função, você não poderá usá-lo como está fazendo. Você precisa fazer algo assim:
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]
});

Terceiro, seu findOne não funcionará como está. Pelo que eu posso reunir da sua intenção aqui, você precisa de algo assim:
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;
}

Mas quarto, mesmo isso não funcionará porque você está retornando o usuário de forma síncrona de um método que executa uma operação assíncrona. Existem várias maneiras de resolver isso, mas você pode começar lendo sobre promessas ou passando uma função de retorno de chamada para searchUser.