前回は、
今回は、
meteor mongo
まずご紹介するのは、meteor mongo
というコマンドが用意されており、
meteor mongo
コマンドを使用するには、meteor
コマンドをバックグラウンドで実行します。
$ meteor & [1] 92383 ... Running on: http://localhost:3000/
そして、meteor mongo
コマンドを実行してみましょう。
$ meteor mongo MongoDB shell version: 2.2.1 connecting to: 127.0.0.1:3002/meteor > (ここにクエリを記述)
クエリはdb.<コレクション名>.find()
のように記述します。dbという変数が、
> db.employees.find(); // 全件検索する { "name" : "しゅんぺい", "age" : "34", "_id" : "1fd18b19-579b-4e90-8ac1-c2847adbe00d" } { "name" : "たえこ", "age" : "33", "_id" : "98a0e2d7-c24f-42ca-9bc6-6e226641d18f" } { "name" : "こうたろう", "age" : "4", "_id" : "824724da-81cd-43f7-b2c3-829c426ae001" } { "name" : "ちほ", "age" : "2", "_id" : "a4ad5a78-e857-43d3-84b3-092fc8aa10aa" } > db.employees.find({age: { $gt: 30 }}); // 30歳以上のデータを検索 { "name" : "しゅんぺい", "age" : 34, "_id" : "e52e6ac7-5dc0-4326-a3f0-1771bd55f09e" } { "name" : "たえこ", "age" : 33, "_id" : "f6ae7e0a-51ff-4712-b40a-97d62eeafae9" }
また、
> db.employees.remove({}); //全データを削除 > db.employees.find(); // 全件検索する > // データがない
MongoDBに対するクエリの記述方法は、
セキュリティを向上させる
Meteorのデフォルトでは、
しかし、
そこで、
パッケージを削除するためには、meteor remove <パッケージ名>
を実行します。
$ meteor remove autopublish insecure
ここでサンプルを再度実行してみましょう。すると、

これは、
まず、Meteor.
メソッドを使用します。publish()
の第一引数には任意の名称、publish()
については次回詳しく説明します。
// (1) 全ての従業員データを公開する
Meteor.publish("all-employees", function () {
return Employees.find(); // everything
});
また、Meteor.
の引数に、publish()
で使用された名前を指定します。
// (2) 従業員データをサブスクライブする
Meteor.subscribe('all-employees');
このようにコードを修正した時点で実行結果を見てみると、
クライアントからのデータ修正を許可<コレクション>.allow()
や<コレクション>.deny()
といったメソッドを使用します。これらのメソッドには、insert
, update
, remove
, fetch
という名前のプロパティを持つオブジェクトを渡します。このサンプルでは全ての操作を許可するため、
// (3) 従業員データに対する全てのデータ操作を許可する
Employees.allow({
// データの挿入を許可するか
insert: function(userId, doc) {
return true;
},
// データの更新を許可するか
update: function(userId, docs, fields, modifier) {
return true;
},
// データの削除を許可するか
remove: function(userId, docs) {
return true;
},
// クライアントに公開するプロパティを、文字列配列で指定する
// 全て公開する場合はundefined(もしくは指定しない)
fetch: undefined
});
insert
, update
, remove
の値となるコールバック関数がtrue
を返した場合は、false
、deny()
メソッドの場合はその逆になります)。
各コールバック関数が取る引数の説明を以下に記します。
userId
…その操作を行ったユーザID。ログインしていない場合はnull。データを作成したユーザのIDは、ドキュメントの owner
プロパティに格納される。doc
…更新対象のドキュメント。(docs) fields
…update
の場合にのみ使用される。更新対象となるフィールド名の配列modifier
…update
の場合にのみ使用される。更新操作を表すオブジェクト( modifier
)。
以上の変更を加えたサンプル9-1を、
まとめ
今回は、