MongoDB

概要

MongoDB用の接続に関する説明


インストール

package.jsonを編集

{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app"
  },
  "dependencies": {
    "express": "3.1.0",
    "jade": "*",
    "mongodb": ">= 0.9.0"
  }
}
 

「npm install」でインストールを実行

D:\Tools\Works\nodejs_test\webexpress01>npm install
npm WARN package.json application-name@0.0.1 No README.md file found!
npm http GET https://registry.npmjs.org/mongodb
npm http 200 https://registry.npmjs.org/mongodb
npm http GET https://registry.npmjs.org/mongodb/-/mongodb-1.2.14.tgz
npm http 200 https://registry.npmjs.org/mongodb/-/mongodb-1.2.14.tgz
npm http GET https://registry.npmjs.org/bson/0.1.8
npm http 200 https://registry.npmjs.org/bson/0.1.8
npm http GET https://registry.npmjs.org/bson/-/bson-0.1.8.tgz
npm http 200 https://registry.npmjs.org/bson/-/bson-0.1.8.tgz
 
> bson@0.1.8 install D:\Tools\Works\nodejs_test\webexpress01\node_modules\mongodb\node_modules\bson
> (node-gyp rebuild 2> builderror.log) || (exit 0)
 
 
D:\Tools\Works\nodejs_test\webexpress01\node_modules\mongodb\node_modules\bson>node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild
mongodb@1.2.14 node_modules\mongodb
└── bson@0.1.8
 
D:\Tools\Works\nodejs_test\webexpress01>
 

mongodbサーバのデータを用意、確認

> use testdb01
switched to db testdb01
>
> db.sample.find()
{ "_id" : ObjectId("51656cdc05d8cc0fb2136d90"), "aaa" : "111" }
{ "_id" : ObjectId("516571711a63b8674ff2f9b7"), "aaa" : "222" }
>
 
 

サンプルソース

app.js

/**
 * Module dependencies.
 */
 
var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , mongo = require('./routes/mongo')		// 追加
  , http = require('http')
  , path = require('path');
 
var app = express();
 
app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});
 
app.configure('development', function(){
  app.use(express.errorHandler());
});
 
// ルーティングメソッド設定
app.get('/', routes.index);
app.get('/users', user.list);
 
app.get('/mongo', mongo.showMongo);		// 追加
app.post('/mongo', mongo.saveMongo);		// 追加
 
http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});
 
 

routes/mongo.js

/*
 * データベース
 */
 
var mongo = require('mongodb');
var client = new mongo.Db('testdb01', new mongo.Server('localhost', 10000));
 
client.open(function (err, client){
    if(err){
        console.log(err);
    }else{
        console.log('connected to mongodb');
    }
});
 
// 表示用
exports.showMongo = function(req, res){
    client.collection('sample', 
        function(err, collection){
            if(err){
                throw err;
            }
            collection.find().toArray(
                function(err, results){
                    if(err){
                        throw err;
                    }
                    res.render('mongo', {
                        title: 'aaaa',
                        list: results
                    });
                }
            );
        }
    );
};
 
// 追加用
exports.saveMongo = function(req, res){
    // パラメータ取得
    var name = req.param('name');
 
    client.collection('sample', 
        function(err, collection){
            if(err){
                throw err;
            }
 
            // 保存
            collection.save({aaa: name}, 
                function(err, results){
                    if(err){
                        throw err;
                    }
                    // リダイレクト
                    res.redirect("/mongo");
                }
            );
        }
    );
 
};
 
 

views/mongo.jade

doctype 5
html
  head
    meta(charset="utf-8")
    title= title
  body
    div
      h1 Mongo DB
      h2 データ追加
 
      form(action="./mongo", method="post")
          input(type="text", name="name")
          input(type="submit", value="追加")
 
      ul
        each item in list
          li=item.aaa
 
 
 

結果

画面表示して既存のデータを確認


データを入力して追加


表示画面に表示されていること


クライアントより確認して、追加されていること

> db.sample.find()
{ "_id" : ObjectId("51656cdc05d8cc0fb2136d90"), "aaa" : "111" }
{ "_id" : ObjectId("516571711a63b8674ff2f9b7"), "aaa" : "222" }
{ "aaa" : "333333", "_id" : ObjectId("516575141f4ca65020000002") }
>
 
 






最終更新:2013年04月10日 23:22