2017-07-25 12 views
-2

既存のコレクションに自動インクリメントを追加するのに役立つメソッドやパッケージはありますか?コレクションが作成される前にAIを追加する方法についての情報が満載のインターネットですが、コレクションがすでに存在する場合にAIを追加する方法に関する情報は見つかりませんでした。...mongodb/node.jsの既存のコレクションに自動インクリメントを追加するには?

+0

何自動増分を意味しますか? Mongoの_idは自動的に段階的に生成されます。 –

+0

@Jeremy Thille 1,2,3,4,5 ...など。 –

+0

Mongodbには、ネイティブの自動インクリメント整数シーケンスAFAIKはありません。 –

答えて

1

MongoDBは作り付けの自動インクリメント機能を持っていません。

挿入するために使用された最後のシーケンス値を追跡するために新しいコレクションを作成します。

db.createCollection("counter") 

それとして1つのレコードのみを保持します:

db.counter.insert({_id:"mySequence",seq_val:0}) 

JavaScript関数を作成して:

function getNextSequenceVal(seq_id){ 
    // find record with id seq_id and update the seq_val by +1 
    var sequenceDoc = db.counter.findAndModify({ 
     query:{_id: seq_id}, 
     update: {$inc:{seq_val:1}}, 
     new:true 
    }); 

    return sequenceDoc.seq_val; 
} 

既存のコレクションの既存の値をすべて更新するには、次のようにします。 houldの仕事(あなたが唯一のいくつかのドキュメントを更新したい場合は、{}は空の場合は、あなたがあなたの条件を配置することができます):

db.myCollection.update({}, 
    {$set:{'_id':getNextSequenceVal("mySequence")}},{multi:true}) 

今、あなたのように、既存のコレクションに新しいレコードを挿入することができます。

db.myCollection.insert({ 
    "_id":getNextSequenceVal("mySequence"), 
    "name":"ABC" 
}) 
1

MongoDBはすべての文書の最上位に_idフィールドを主キー。 _idはユニークでなければならず、常にユニーク制約を持つインデックスを持ちます。自動インクリメントフィールドです。ただし、MongoDBのマニュアルのチュートリアルの後に独自の自動インクリメントフィールドを定義することは可能です。

Tutorial linkhttps://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/

関連する問題