英数字の文字列をインクリメント/デクリメントすることは意味がありません。 MongoDB(またはアプリケーションコード)に数値部分の調整を依頼する前に、元の文字列値を意味のある部分に分割する必要があります。
通常、パーマリンク を使用します また、デクリメントではなく値をインクリメントすることになります。パーマリンクの全体的な目的は、特定のリンクが常に同じリソースを指していることを確認することです。
実際にシーケンスパターンを実装したいようです。ここで、次に使用できるシーケンス値を見つけます。
たとえば、次を参照してください:自動インクリメントシーケンスの作成 MongoDBマニュアルで。
これは、getNextSequence()
のわずかに変更されたバージョンです。 upsert
を使用するドキュメントの関数 既存のスラッグカウンタードキュメントを見つけるか、新しいドキュメントを挿入します。戻り値は新しい一意のスラッグです:
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
開始値からデクリメントしたい場合は、シーケンスの開始値を挿入し、代わりに$inc: { seq: -1 }
を使用してそれを減らすことができます。 。