sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo hacer una consulta usando dot( . ) a través de Mongoose en Node.js y Cómo agregar una matriz vacía

Aquí hay una serie de problemas con los que probablemente te encuentres.

Primero, teams es una propiedad de matriz, pero le estás asignando un objeto. Tienes que hacer algo como esto:

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

En segundo lugar, si socialMediaType se pasa como un parámetro de función, no puede usarlo como lo está haciendo. Tienes que hacer algo como esto:

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

En tercer lugar, su findOne no funcionará como está. Por lo que puedo deducir de tu intención aquí, necesitas algo como esto:

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

Pero cuarto, incluso eso no funcionará porque está devolviendo al usuario sincrónicamente desde un método que realiza una operación asincrónica. Hay varias formas de resolver eso, pero puede comenzar leyendo acerca de las promesas o pasando una función de devolución de llamada a searchUser.