自分で作ったり提供したりするものは、まず自分自身で使ってみろろということです。自分じゃ使わないものなら人はいくらでも無責任にも無思考にもなれる。そういう投げやりな「サービス」やら「プロダクツ」なんて、だれだってイヤだ。自分が作り手と同時に利用者の立場になれば、ちゃんと使えるレベルのものを提供しようとします。

ラベル MongoDB の投稿を表示しています。 すべての投稿を表示
ラベル MongoDB の投稿を表示しています。 すべての投稿を表示

2013年11月7日木曜日

mongodb認証

MongoDBはデフォルトでユーザー認証機能をオフになっています、このトピックでユーザー認証機能をONにします。

ユーザー追加
$mongo
use test
db.addUser('uid1', 'pwd1');
db.addUser('uid2', 'pwd2', true); //readonly
exit

$sudo nano /etc/mongodb.conf
...
#アンコメント
auth = true
...

$sudo service mongodb restart

Done!

PS:
mongoose接続例
'mongodb://uid1:pwd1@192.168.1.1/test'

2013年10月20日日曜日

mongooseでMongoDBに接続してみる

前回と前々回はmongodbとmongoskinを使ってMongoDBに接続処理を紹介しました、今回はmongooseの使い方を紹介します。

Mongoose
http://mongoosejs.com/

まず、インストールします
npm install mongoose

MongoDBは何もせずに、直接にアクセスコードを書きます
nano mongoose.js
...
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test01');

var kittySchema = mongoose.Schema({
    name: String,
    age: Number
    });
kittySchema.methods.speak = function () {
  var greeting = this.name
      ? "Meow name is " + this.name : "I don't have a name"
  console.log(greeting);
}
kittySchema.statics.findAge10 = function(cb) {
  this.find({age:10}, cb);
}

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
    var Kitten = mongoose.model('Kitten', kittySchema);
    var silence = new Kitten({ name: 'Silence', age: 10 });
    console.log(silence.name);
    silence.speak();

    silence.save(function(error, doc){
        if (error) throw error;

        doc.speak();
    });

    Kitten.find({age:10}, function(error, kittens){
        if (error) throw error;
        //console.log(kittens.length);
        for(var i = 0; i < kittens.length; i++) {
            console.log("name=" + kittens[i].name + ", age=" + kittens[i].age);
        }
    });
    Kitten.findAge10(function(error, kittens){
        if (error) throw error;
        for(var i = 0; i < kittens.length; i++) {
            console.log("[findAge10]" + "_id=" + kittens[i]._id + ", name=" + kittens[i].name + ", age=" + kittens[i].age);
        }
    });
});
...

2013年10月14日月曜日

MongoSkin基本使用

MongoDBにアクセスできるドライバーMongoskinの基本使い方です。

/**
 * Mongoskin
 * https://github.com/kissjs/node-mongoskin
 * http://www.hacksparrow.com/mongoskin-tutorial-with-examples.html
 */
// ライブラリ参照
var mongo = require('mongoskin');
// DB接続
var db = mongo.db('192.168.11.1:27017/blog_db', {
    safe : false
});
// コレクション取得
var users = db.collection('users');
// user検索
users.find({
    "name" : {
        $regex : /user-[0-4]/i
    }
}).toArray(function(error, band) {
    for ( var i = 0; i < band.length; i++) {
        console.log("name" + i + "=" + band[i].name);
    }
});
var threads = db.collection('threads');
var thread = {
    "title" : "title-4",
    "content" : "this is title-4 content."
};
// データ追加
threads.insert(thread, function(error, resultArray) {
    console.log("inserted thread title=" + JSON.stringify(resultArray));
    threads.find({}).each(function(error, thread) {
        if (thread !== null)
            console.log("thread title=" + thread.title);
    });
    // データ更新
    threads.update({
        "title" : "title-4"
    }, {
        $set : {
            "content" : "new title-4 content."
        }
    }, function(error, result) {
        console.log("object is updated.");
        threads.findOne({
            "title" : "title-4"
        }, function(error, thread) {
            console.log("thread4 new content=" + thread.content);
        });
    });
});
// データ削除
threads.remove({
    "title" : "title-4"
}, function(error, result) {
    console.log("object is removed.");
});
// データ件数取得
threads.count({}, function(error, count) {
    console.log("threads.count=" + count);
});

Node.jsで MongoDBにアクセスしてみる

node-mongodb-nativeドライバーを使ってNode.jsはドキュメント指向データベースMongoDBにアクセスするサンプルです。

MongoDBドライバーインストール
npm install mongodb

/**
 * MongoDB Access Sample http://mongodb.github.io/node-mongodb-native/
 */
var MongoClient = require('mongodb').MongoClient;

MongoClient.connect("mongodb://192.168.11.1:27017/blog_db", function(err, db) {
    // threadsコレクションオブジェクト作成
    var threads = db.collection('threads');
    // threadsデータクリア
    threads.remove({}, function(error, result) {
        console.log("removed result=" + result);
        // 追加データ用意
        var thread = [ {
            "title" : "title-1",
            "content" : "this is thread1 \"content\"."
        }, {
            "title" : "title-2",
            "content" : "this is thread2 \"content\"."
        }, {
            "title" : "title-3",
            "content" : "this is thread3 \"content\"."
        } ];
        threads.insert(thread, function(error, result) {
            console.log("inserted count=" + result.length);
            console.log("result[0].title=" + result[0].title);
            console.log("result[1].title=" + result[1].title);
            console.log("result[2].title=" + result[2].title);

            // 件数取得
            threads.count(function(error, count) {
                console.log('all threads count=' + count);
            });

            // title-2データ取得
            threads.findOne({
                "title" : "title-2"
            }, function(error, item) {
                if (error) {
                    throw error;
                }
                console.log("findOne({title-2})=" + item.content);

                // title-2データ更新
                threads.update({
                    "title" : "title-2"
                }, {
                    $set : {
                        "content" : "thread2 new content"
                    }
                }, function(error, result) {
                    console.log("updated result=" + result);

                    // 更新したデータを取得
                    threads.findOne({
                        "title" : "title-2"
                    }, function(error, item) {
                        console.log("updated thread2 content=" + item.content);
                    });
                });
            });
        });
    });
});

2013年10月13日日曜日

MongoDB基本使用

今日はドキュメント向けのデータベースMongoDBをいろいろと触りました、試したコマンドをメモします。

まず結論から言うと、MongoDBは本当に面白いデータベースです、今後のサイト構築は使うでしょう。

#mongodbシェルに入る
$mongo
#現在DB一覧
show dbs;
#利用DBに切り替える
use local
use blog_db;
#コレクション作成(テーブル)
db.createCollection("users");
show dbs;
#dbコマンドヘルプ
db.help();
#現在DB状態
db.stats();
#現在DB削除
db.dropDatabase();
#DB一覧
show dbs;

use blog_db;
db.createCollection("posts");
#コレクション一覧
show collections;
#コレクション削除
db.users.drop();
#コレクションリネーム
db.posts.renameCollection("threads");
#mongodbシェル終了
exit

#blog_dbに入る
$mongo blog_db
#コレクション一覧
show collections;
#usersコレクションにデータを追加
db.users.insert({"name":"koma","address":"tokyo","point":100});
#usersコレクションデータ検索
db.users.find();
#usersコレクションに違うスキマーデータを追加
db.users.insert({"name":"xiaoma", "skill":["linux","unix","mac os"]});
db.users.find();
#usersコレクション削除
db.users.remove();
db.users.find();

show collections;
db.users.find();
#大量データ追加(javascriptで)
for(var i = 0; i < 10; i++) {
db.users.insert({"name":"user-" + i, "group": i%3, "point": Math.floor(Math.random() * 100)});
}
db.users.find();

#検索条件付き(group=1)
db.users.find({"group":1});
#検索項目指定(name)
db.users.find({"group":1}, {"name":true});
#検索条件(group<>1)
db.users.find({"group":{$ne:1}}); //1以外を
#検索条件(point>40)
db.users.find({"point":{$gt:40}});
$gt >
$gte >=
$lt <
$lte <=
#検索条件(point>40 and point<60)
db.users.find({"point":{&gt:40, &lt:60}});
#検索条件(正規表現)
db.users.find({"name":{$regex:/user-[0-4]/i}});
#検索結果並び替え(point asc)
db.users.find().sort({"point":1}); // 1=asc;-1:desc
#SELECT TOP 1
db.users.findOne();
#検索件数制限(最初の3件)
db.users.find().limit(3);
#検索件数制限(3個目から3件)
db.users.find().skip(2).limit(3);
#検索件数
db.users.find().count();
#SELECT DISTINCT group
db.users.distinct("group");
#SELECT IN
db.users.find({"name":{$in:["user-3", "user-7"]}}); //in
#SELECT NOT IN
db.users.find({"name":{$nin:["user-3", "user-7"]}}); //not in
#データ追加
db.users.insert({"address":"my address content"});
#address項目存在のみデータ抽出
db.users.find({"address":{$exists:true}});

#インデックス情報取得
db.users.getIndexes();
#インデックス作成
db.users.ensureIndex({"point":1}); //1:asc;-1:desc
db.users.getIndexes();
#インデックス削除
db.users.dropIndex({"point":1});
db.users.getIndexes();
#唯一インデックス作成
db.users.ensureIndex({"name":1}, {"unique":true});
db.users.insert({"name":"user-5"});

#データ更新(CLEAR更新)
db.users.update({"name":"user-1"}, {"point":100});
db.users.find();
#データ更新(指定項目)
db.users.update({"name":"user-2"}, {$set:{"point":100}});
db.users.find();
#データ更新(数値累計)
db.users.find({"name":"user-3"}, {$inc:{"point":10}});
db.users.find();
#データ更新(項目削除)
db.users.update({"name":"user-4"}, {$unset:{"point":1}});
db.users.find();
#データ更新(項目名変更)
db.users.update({"name":"user-5"}, {$rename:{"group":"mygroup"}});
db.users.find();

#データあれば更新、なければ作成
db.users.update({"name":"user-10"}, {$inc:{"point":10}}, true); //upsert
db.users.find();
#最初の1件だけ+100
db.users.update({}, {$inc:{"point":100}});
#全件+100
db.users.update({}, {$inc:{"point":100}}, false, true);

#コマンドバッチ作成
$nano batch.js
...
db.users.remove({"name":"user-10"});
...
#バッチ実行(コマンドライン)
$mongo blog_db batch.js
$mongo blog_db
db.users.find();
#バッチ実行(load関数)
load("batch.js"); //load script
db.users.find();

#DBバックアップ
$mongodump --db blog_db
#DBリストア
$mongorestore --drop

2013年10月12日土曜日

UbuntuでMongoDBインストール

MongoDBをUbuntuでインストールしてみました。

参照URL
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

#MongoDB GPGキー追加
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

#MongoDBサーバーリストを追加
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list

#Ubuntuシステム更新(上記設定した内容を適用)
sudo apt-get update

#MongoDBインストール
sudo apt-get install mongodb-10gen

#インストールMongoDBバージョン選択もできる
apt-get install mongodb-10gen=2.2.3
echo "mongodb-10gen hold" | sudo dpkg --set-selections

#インストールした関連ファイル
/etc/mongodb.conf
/etc/init.d/mongodb
/var/lib/mongodb
/var/log/mongodb

#MongoDBサービス利用
sudo service mongodb start
sudo service mongodb stop
sudo service mongodb restart

ホームページ