MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie man eine Abfrage mit dot( . ) durch Mongoose in Node.js durchführt und wie man ein leeres Array hinzufügt

Hier gibt es eine Reihe von Problemen, auf die Sie wahrscheinlich stoßen werden.

Erstens ist Teams eine Array-Eigenschaft, aber Sie weisen ihr ein Objekt zu. Sie müssen etwa so vorgehen:

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

Zweitens, wenn socialMediaType als Funktionsparameter übergeben wird, können Sie es nicht so verwenden, wie Sie es tun. Sie müssen etwa so vorgehen:

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

Drittens wird Ihr findOne nicht so funktionieren, wie es ist. Von dem, was ich hier über Ihre Absicht sammeln kann, brauchen Sie so etwas:

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

Aber viertens funktioniert selbst das nicht, weil Sie den Benutzer synchron von einer Methode zurückgeben, die einen asynchronen Vorgang ausführt. Es gibt verschiedene Möglichkeiten, das zu lösen, aber Sie können damit beginnen, sich über Versprechungen zu informieren oder eine Rückruffunktion an searchUser.

zu übergeben