sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man gör en fråga med hjälp av dot( . ) genom Mongoose i Node.js och hur man lägger till en tom array

Det finns ett antal problem här som du förmodligen stöter på.

För det första är teams en array-egenskap, men du tilldelar ett objekt till den. Du måste göra något så här:

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

För det andra, om socialMediaType skickas in som en funktionsparam, kan du inte använda den som du gör. Du måste göra något så här:

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

För det tredje kommer din findOne inte att fungera som den är. Vad jag kan förstå om din avsikt här, behöver du något sånt här:

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

Men för det fjärde kommer inte ens det att fungera eftersom du synkront återvänder användare från en metod som utför och asynkron operation. Det finns olika sätt att lösa det på, men du kan börja med att läsa på om löften eller skicka en återuppringningsfunktion till searchUser.




  1. Pop flera värden från Redis datastruktur atomärt?

  2. Hur kan jag hämta modifierade dokument efter en uppdateringsoperation i mongodb med pymongo?

  3. Kommer en Mongo $nära att returnera dokument för vilka någon punkt i en MultiPoint är inom räckhåll?

  4. Det finns ett sätt att upprätthålla referensintegritet i MongoDB