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...
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
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
.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