HOWTO · MongoDB

MongoDB の自動インクリメント

このチュートリアルでは、MongoDB で自動インクリメントを実装する方法について説明します。

このページの内容

ほとんどの SQL クエリ言語には、フィールドを自動インクリメントするための単一のキーワードが含まれていますが、MongoDB では少し複雑です。 MongoDB では、自動インクリメントに使用できるキーワードはありません。

この記事では、自動インクリメント機能を使用して MongoDB コレクションにデータを挿入する方法を示し、トピックに関連する例を見て簡単にします。

MongoDB で自動インクリメント機能を適用する

新しいドキュメントがコレクションに挿入された後にインクリメントする必要があるフィールドには、シリアル番号、ID などがあります。ただし、クエリにいくつかの単純な文字を追加すると、これを自動的に行うことができます。

この目的で使用するキーワードは $inc で、特定のデータ値をインクリメントします。 それをクエリに統合する方法を見てみましょう。

以下の例では、MongoDB で自動インクリメントを使用する方法を示します。 この目的のために、最初に、シーケンス番号を追跡する count という名前の新しいコレクションを作成する必要があります。

以下のようなドキュメントを挿入して、コレクションを初期化しましょう。

db.count.insert(
   {
      _id: "incId",
      seq: 0
   }
)

これにより、インクリメント シーケンスが 0 に初期化されます。 ここで、count コレクションと指定されたコレクションの両方の値をインクリメントする autoIncrement() という名前の関数を作成します。

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

   return ret.seq;
}

この関数はインクリメントされたシーケンス値を返します。これは、次のような関数を呼び出すことで insert 関数で使用できます。

db.mycollection.insert({ sl: autoIncrement("incId"), Name: "Retro"});
db.mycollection.insert({ sl: autoIncrement("incId"), Name: "Max"});

上記のコマンドを実行した後、フィールド値を手動でインクリメントする必要はありません。 ドキュメントを挿入すると、コンソールに次の出力が表示されます。

{ _id: ObjectId("6388f500054350812fa6b073"),
  sl: 1,
  Name: 'Retro' }
{ _id: ObjectId("6388f94e054350812fa6b075"),
  sl: 2,
  Name: 'Max'
}

複数のコレクションの値をインクリメントするために、1つのカウント コレクションを使用できないことに注意してください。 コレクション count は、インクリメント値を保持および更新する変数のようなものであるため、複数のコレクションで値をインクリメントするためのカウント コレクションを作成する必要があります。

この記事に示されているコマンドは MongoDB データベース用であり、コマンドは MongoDB コンソールで実行する必要があることに注意してください。