Latest web development tutorials

MongoDBは自動的に増加し

MongoDBは自動的に成長させるためのSQL機能と同じではありませんが、MongoDBのの_idが一意に自動的に生成されたシステムを識別する12バイトです。

しかし、いくつかのケースでは、我々は、自動拡張機能をObjectIdを実装する必要があるかもしれません。

MongoDBは、この機能を実装していないので、我々が達成するためにプログラムすることができ、我々は自動的にコレクションに対抗成長次の_idフィールドを実現します。


カウンターのコレクションを使用します

次の製品のマニュアルを考えてみましょう。 我々は、n自動拡張機能に1,2,3,4 _idフィールドから達成したいと考えています。

{
  "_id":1,
  "product_name": "Apple iPhone",
  "category": "mobiles"
}

これを行うには、カウンタのセットを作成し、自動シーケンスフィールドの値は長くすることができます:

>db.createCollection("counters")

今、私たちは、コレクション内のカウンタに次の書類を挿入キーとして商品コードを使用します。

{
  "_id":"productid",
  "sequence_value": 0
}

sequence_valueフィールドは、後に自動成長によって値のシーケンスです。

コレクションの文書カウンターを挿入するには、次のコマンド・シーケンスを使用します。

>db.counters.insert({_id:"productid",sequence_value:0})

JavaScript関数を作成します

今、私たちは入力シーケンス名としてgetNextSequenceValue関数を作成し、指定されたシーケンスは、自動的に1によって成長し、最新のシーケンス値を返します。 この記事のシリーズの例でのProductIDと呼ばれます。

>function getNextSequenceValue(sequenceName){
   var sequenceDocument = db.counters.findAndModify(
      {
         query:{_id: sequenceName },
         update: {$inc:{sequence_value:1}},
         new:true
      });
   return sequenceDocument.sequence_value;
}

JavaScript関数を使用します

次に、新しいドキュメントを作成するためにgetNextSequenceValue機能を使用して、戻されたドキュメントの_id自動シーケンスの値を設定します次のとおりです。

>db.products.insert({
   "_id":getNextSequenceValue("productid"),
   "product_name":"Apple iPhone",
   "category":"mobiles"})

>db.products.insert({
   "_id":getNextSequenceValue("productid"),
   "product_name":"Samsung S3",
   "category":"mobiles"})

あなたが見ることができるように、我々は_idフィールドを設定するgetNextSequenceValue関数を使用します。

機能の有効性を検証するために、我々は文書を読むには、次のコマンドを使用することができます。

>db.products.find()

上記のコマンドは、次のような結果が返されます、我々は_idフィールドが自己成長であるが見つかりました:

{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"}

{ "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }