MongoDB チュートリアルlogin
MongoDB チュートリアル
著者:php.cn  更新時間:2022-04-21 17:49:03

MongoDB の自動拡張


MongoDBにはSQLのような自動拡張機能がありません。 MongoDB の _id は、システムによって自動的に生成される 12 バイトの一意の識別子です。

ただし、場合によっては、ObjectId 自動拡張機能を実装する必要があるかもしれません。

MongoDB はこの関数を実装していないため、以下でプログラム的に実装することができます。 カウンタ コレクションの _id フィールドの自動拡張を実装します。


カウンターコレクションの使用

次の製品ドキュメントを検討してください。 _id フィールドを実装したい 1、2、3、4からnまでの自動インクリメント機能。

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

この目的のために、カウンター コレクションを作成すると、シーケンス フィールド値が自動的に拡張されます:

>db.createCollection("counters")

ここで、productid をキーとして使用して、次のドキュメントをカウンター コレクションに挿入します:

{
  "_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"})

ご覧のとおり、getNextSequenceValue 関数を使用して _id フィールドを設定します。

関数が有効かどうかを確認するには、次のコマンドを使用してドキュメントを読み取ることができます:

>db.products.find()

上記のコマンドは次の結果を返し、_id フィールドが自動増加していることがわかります:

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

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

PHP中国語ウェブサイト