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" }