MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Puis-je décrémenter du texte dans mongodb?

Cela n'a pas de sens d'incrémenter/décrémenter une chaîne alphanumérique; vous devez séparer la valeur de chaîne d'origine en parties significatives avant de demander à MongoDB (ou à votre code d'application) d'ajuster la partie numérique.

Normalement avec des permaliens vous augmenteriez également les valeurs plutôt que de les décrémenter -- le but des permaliens est de s'assurer qu'un lien donné pointe toujours vers la même ressource.

Il semble que vous vouliez réellement implémenter un modèle de séquence, où vous trouvez la prochaine valeur de séquence disponible à utiliser.

Par exemple, voir :Créer une séquence d'incrémentation automatique dans le manuel MongoDB.

Voici une version légèrement modifiée de getNextSequence() fonction dans la documentation qui utilise upsert soit pour rechercher un document de compteur de slug existant, soit pour en insérer un nouveau. La valeur de retour est un nouveau slug unique :

function getNextSequence(name) {
   var ret = db.counters.findAndModify(
      {
        query: { _id: name },
        update: { $inc: { seq: 1 } },
        upsert: true,
        new: true,
      }
   );

    // Return the new slug (eg: "example_1")
    return name + '_' + ret.seq;
}

> getNextSequence("example")
example_1
> getNextSequence("example")
example_2
> getNextSequence("example")
example_3

Si vous souhaitez décrémenter à partir d'une valeur de départ, vous pouvez insérer une valeur de départ pour votre séquence et la réduire à la place avec $inc: { seq: -1 } .