> npm install mongodb
続いて、データベースに接続してコレクションを作成した後ドキュメントを挿入し、コレクションを削除するという簡単なサンプルプログラム。
var mongo = require('mongodb'); // ドキュメントサンプル。 var doc1 = {'key1':'val1'}; var doc2 = {'key2-1':'val2-1', 'key2-2':'val2-2'}; var docs = [doc1, doc2]; // serverの設定。 var server = new mongo.Server('localhost', 27017, {auto_reconnect: true}); // dbの設定。 var db = new mongo.Db('exampleDb', server, {safe:true}); //var db = new mongo.Db('exampleDb', server); var closeDB = function() { db.close(true, function(err, result) { console.log("close!"); }); } // コネクションオープン。 db.open(function(err, db) { if (!err) { console.log("open!"); // コレクションの作成。既に存在する場合はエラー。 db.createCollection('collection1', {strict:true}, function(cerr, collection) { if (!cerr) { console.log("create!"); // ドキュメントの格納。 collection.insert(docs, function(ierr, res) { if (!ierr) { console.log("insert doc1!"); // ドキュメントの検索。 collection.find().toArray(function(ferr, items) { if (!ferr) { console.log(items); // コレクションの削除。 collection.drop(); closeDB(); } else { console.log(ferr); collection.drop(); closeDB(); } }); } else { console.log(ierr); collection.drop(); closeDB(); } }); } else { console.log(cerr); closeDB(); } }); } else { console.log(err); } });
MongoDBでは、今のところデフォルトで書き込みの結果を待たずにリターンを返します(safe=false)。つまり、書き込みが成功したか失敗したかがすぐにわかりません。これは、データベースを作成する際にsafe=trueを設定することで変更できます。また、書き込みの挙動は以下のように設定することができます。
- j:ジャーナル(redoログのようなもの)のコミットを待つ。ジャーナルが設定されていなければそのまま返す。
- w:レプリカに指定数反映されるのを待つ。タイムアウト指定も可能。
- fsync:ジャーナリングされてない場合は全てのファイルをfsyncするのを待つ。ジャーナリングしている場合は次のグループのコミットを待つ。非推奨なのでjを使うべき。
MongoDBでは動的にcollectionを作成するケースも多いですが、既に作成しようとするcollection存在する場合はエラーを受け取りたい、という場合もあります。その場合はcreateCollectionでstrict:trueを指定します。
- createCollectionでstrict:false(デフォルト)の場合、既に存在する場合は何もしない(作成しない)
- createCollectionでstrict:trueの場合、既に存在する場合はエラーを返す。
- collectionでstrict:false(デフォルト)の場合、コレクションが存在しない場合は最初のinsertで作成する。
- collectionでstrict:trueの場合、コレクションが存在しない場合はエラーを返す。
Node.jsというよりMongoDBの話になりましたが、他の言語でMongoDBを使っている開発者ならかなり違和感なく使えそうですね。また、MongoDBはWeb上にもドキュメントが揃ってきていますので、NoSQL初心者でも比較的情報は得やすいですね。
0 件のコメント:
コメントを投稿