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

Sådan laver du en forespørgsel ved hjælp af dot( . ) gennem Mongoose i Node.js og hvordan du tilføjer et tomt array

Der er en række problemer her, som du sandsynligvis løber ind i.

For det første er teams en array-egenskab, men du tildeler et objekt til det. Du skal gøre noget som dette:

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

For det andet, hvis socialMediaType sendes ind som en funktionsparameter, kan du ikke bruge den, som du gør. Du skal gøre noget som dette:

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

For det tredje vil din findOne ikke fungere, som den er. Ud fra hvad jeg kan forstå om din hensigt her, har du brug for noget som dette:

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 for det fjerde vil selv det ikke fungere, fordi du synkront returnerer bruger fra en metode, der udfører og asynkron drift. Der er forskellige måder at løse det på, men du kan starte med at læse op om løfter eller overføre en tilbagekaldsfunktion til searchUser.




  1. Sådan sorteres mongodb-forespørgselsresultater baseret på underdokumenter

  2. MongoDB :Hvordan multipliceres et felt, der kun vises i $project?

  3. Hvordan laver man en Mongo-aggregeringsforespørgsel i Spring Data?

  4. Hvordan bruger man MongoDB Ruby Driver til at lave en gruppe (grupper efter)?