express - MongoDB, comment vérifier si une valeur existe déjà lors de la mise à jour d'un enregistrement
淡淡烟草味
淡淡烟草味 2017-05-02 09:22:58
0
3
694

Description du scénario
Lorsqu'un enregistrement doit être mis à jour, vérifiez d'abord si le nom de cet enregistrement existe déjà dans 集合Collection (en excluant lui-même).

Direction logique
Etape 1 : Retrouvez-vous dans le set
Etape 2 : Retrouvez-vous dans le set selon votre nom
Etape 3 : Jugez Step 1的_id et Step 2的_id Si cela correspond
Étape 4 : Si les deux _ids ne correspondent pas, le message « le nom existe déjà » s'affichera sinon, terminez la mise à jour de l'enregistrement

 ;

Le problème que nous rencontrons actuellement est le suivant : Step 1的_id et Step 2的_id ne peuvent pas correspondre.

Joindre mon code

var _q = req.body, _qId = mongoose.Types.ObjectId(_q["_id"]);

groups.findById(_qId,function (err,data) {
    if(err){
        res.json({code: 404, msg: "Error"});
    }else{
        groups.findOne({name:_q["name"]},null).exec(function (_err,_data) {
            console.log(data["_id"] == _data["_id"]);
        });
    }
});

Peut-être qu'il y a quelque chose qui ne va pas dans ma réflexion, ou peut-être qu'il y a quelque chose qui ne va pas dans mon code, je dois demander conseil à des experts...

淡淡烟草味
淡淡烟草味

répondre à tous(3)
世界只因有你

Laissez-moi trier votre code. Pour être honnête, je n'aime pas beaucoup votre style de codage, car toutes sortes de déclarations de variables inutiles conduisent à une mauvaise expression du code

D'abord, je suppose que vous utilisez express puisque vous utilisez req.body

//这个定义是为了什么?是为了防止你老板炒了你所以把代码写的别人看不懂吗?
//var _q = req.body, _qId = mongoose.Types.ObjectId(_q["_id"]);

groups.findById(req.body._id, function (err, docById) {
    if(err){
        res.json({code: 404, msg: "Error"});
    }else{
        groups.findOne({name:req.body.name}, null)
            .exec(function (_err, docByName) {
               console.log(docById._id == docByName._id);
            });
    }
});

C'est-à-dire que deux valeurs sont transmises dans votre demande de publication, l'une est _id et l'autre est name Vous utilisez les deux valeurs pour rechercher respectivement la base de données, vous obtenez donc deux résultats de recherche (. Deux documents), puis vous essayez de comparer si le document obtenu via la recherche _id et le document recherché via le nom sont la même chose (bien sûr, comparer _id, c'est comparer s'il s'agit du même document)

En fonction des conditions que vous avez données, j'ai d'abord deviné si le _id et le nom dans le req.body que vous avez donné correspondent. Peut-être qu'ils proviennent de deux documents différents ? Ou peut-être qu'il y a deux documents portant le même nom dans votre base de données, donc le document obtenu via la recherche de nom et le document obtenu via la recherche d'identifiant ne sont pas les mêmes ?

Vous pouvez essayer d'imprimer docById et docByName avant le fichier console.log final, et publier votre schéma mangouste pour y jeter un œil. De cette façon, nous saurons au moins quel type de base de données vous recherchez

.
滿天的星座
 groups.findOne({name:_q["name"]},null).exec(function (_err,_data) {
            console.log(data["_id"] == _data["_id"]);
        });

Cela utilise findOne, qui ne renverra qu'un seul enregistrement. Peut-être qu'il y a plusieurs valeurs portant le même nom dans la bibliothèque, et celle que vous avez supprimée se trouve être différente de celle que vous souhaitez

刘奇

La méthode a été trouvée : utilisez String() pour convertir le _id obtenu à l'étape 1.

Code complet

var _q = req.body, _qId = mongoose.Types.ObjectId(_q["_id"]);

groups.findById(_qId,function (err,data) {
    if(err){
        res.json({code: 404, msg: "Error"});
    }else{
        groups.findOne({name:_q["name"]},null).exec(function (_err,_data) {
            console.log(String(data["_id"]) == _data["_id"]);
        });
    }
});
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal