LoginSignup
6
7

More than 5 years have passed since last update.

Node.jsのMongoDBでauto_increment

Last updated at Posted at 2015-09-02

やりたいこと

「Node.jsからmongodbを利用してauto_incrementしたい」

例として、以下のようなusersコレクションがあり、

db.createCollection('users');

以下のようなidの増加をプログラムで制御します

db.users.insert({id: 1, name: 'Taro'});
db.users.insert({id: 2, name: 'Jiro'});
db.users.insert({id: 3, name: 'Saburo'});

countersコレクションの設定

ターミナルでmongoと打って、useを使ってデータベースを切り替えてから、
以下のスクリプトを実行します

db.counters.insert({
      id: "user_id",
      seq: 0
});

Node.js側

以下のスクリプト内のcountersColl.findAndModify({id: "user_id"}..."user_id"はcounterコレクションに設定した文字列と同じものをしてします

server.js
// MongoDB
var MongoClient = require('mongodb').MongoClient;

// MongoDBに接続をする
MongoClient.connect('mongodb://localhost:27017/test', function(err, db){
    // countersコレクションを取得
    var countersColl = db.collection('counters');
    // usersコレクションを取得
    var usersColl = db.collection('users');

    countersColl.findAndModify({id: "user_id"}, [], { $inc: { seq: 1 } }, {new: true}, function(err, ret){
        // auto_incrementされたuser_idが取得できた
        var newUserId = ret.value.seq;
        // ユーザーを追加
        usersColl.insert({
            id: newUserId,
            name: "Taro"+newUserId
        });
    });
});

動作確認

server.jsを三回実行して、mongoコマンドで確認します
(Ctrl+cでの終了が無理やりな感じがしますが...)

$ node server.js 
^C
$ node server.js 
^C
$ node server.js 
^C
$ mongo
MongoDB shell version: 3.0.3
> use test
switched to db test
> db.users.find()
{ "_id" : ObjectId("55e72eb0469dba70dd789b4b"), "id" : 1, "name" : "Taro1" }
{ "_id" : ObjectId("55e72f6fb770fc2fdecb4fed"), "id" : 2, "name" : "Taro2" }
{ "_id" : ObjectId("55e72fa2d117804fde08606d"), "id" : 3, "name" : "Taro3" }
> 

参考

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7