sql >> Databáze >  >> NoSQL >> MongoDB

Jak provést dotaz pomocí tečky (.) přes Mongoose v Node.js a jak přidat prázdné pole

Je zde řada problémů, na které pravděpodobně narazíte.

Za prvé, týmy jsou vlastnost pole, ale vy k němu přiřazujete objekt. Musíte udělat něco takového:

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

Za druhé, pokud je socialMediaType předán jako parametr funkce, nemůžete jej použít jako vy. Musíte udělat něco takového:

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

Za třetí, váš findOne nebude fungovat tak, jak je. Z toho, co zde mohu shromáždit o vašem záměru, potřebujete něco takového:

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

Ale za čtvrté, ani to nebude fungovat, protože synchronně vracíte uživatele z metody, která provádí asynchronní operace. Existují různé způsoby, jak to vyřešit, ale můžete začít tím, že si přečtete o slibech nebo předáte funkci zpětného volání do searchUser.




  1. Mongodb - regex shoda klíčů pro vnořené dokumenty

  2. Mongodb- Přidá jedinečný index do existující kolekce

  3. Vytvoří mongodb automaticky index v poli _id vložených dokumentů?

  4. Jaký je správný způsob, jak udělat HAVING v MongoDB GROUP BY?