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;
}
既存のコレクション内の既存のすべての値を更新するには、これが機能する必要があります(空の{}の場合、一部のドキュメントのみを更新する場合は条件を設定できます):
db.myCollection.update({},
{$set:{'_id':getNextSequenceVal("mySequence")}},{multi:true})
これで、次のように既存のコレクションに新しいレコードを挿入できます。
db.myCollection.insert({
"_id":getNextSequenceVal("mySequence"),
"name":"ABC"
})