やりたいこと
「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" }
>