Edited at

Node.jsのMongoDBでauto_increment

More than 3 years have passed since last update.


やりたいこと

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


参考