Det är inte meningsfullt att öka/minska en alfanumerisk sträng; du måste separera det ursprungliga strängvärdet i meningsfulla delar innan du ber MongoDB (eller din applikationskod) att justera den numeriska delen.
Normalt med permalänkar du skulle också öka värden istället för att minska -- hela avsikten med permalänkar är att säkerställa att en given länk alltid pekar på samma resurs.
Det låter som att du faktiskt vill implementera ett sekvensmönster, där du hittar nästa tillgängliga sekvensvärde att använda.
Se till exempel:Skapa en automatisk ökningssekvens i MongoDB-manualen.
Här är en något modifierad version av getNextSequence()
funktion i dokumentationen som använder upsert
för att antingen hitta ett befintligt snigelräknaredokument eller infoga ett nytt. Returvärdet är en ny unik slug:
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
Om du vill minska från något startvärde kan du infoga ett startvärde för din sekvens och minska det istället med $inc: { seq: -1 }
.