公式サイトのチュートリアルをなぞる。
The MongoDB 3.4 Manual — MongoDB Manual 3.4
https://docs.mongodb.com/manual/
サンプルデータセットのインポート
1 2 3 4 |
$ cd ~ $ mkdir temp $ curl https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json > primer-dataset.json $ mongoimport --db test --collection restaurants --drop --file ~/temp/primer-dataset.json |
MongoDB Shell起動
1 |
$ mongo |
コマンド一覧
1 |
> help |
データベース選択
1 2 |
> use test switched to db test |
ドキュメント追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
> db.restaurants.insert( ... { ... "address" : { ... "street" : "2 Avenue", ... "zipcode" : "10075", ... "building" : "1480", ... "coord" : [ -73.9557413, 40.7720266 ] ... }, ... "borough" : "Manhattan", ... "cuisine" : "Italian", ... "grades" : [ ... { ... "date" : ISODate("2014-10-01T00:00:00Z"), ... "grade" : "A", ... "score" : 11 ... }, ... { ... "date" : ISODate("2014-01-16T00:00:00Z"), ... "grade" : "B", ... "score" : 17 ... } ... ], ... "name" : "Vella", ... "restaurant_id" : "41704620" ... } ... ) WriteResult({ "nInserted" : 1 }) |
全ドキュメント取得
1 |
> db.restaurants.find() |
条件指定
1 2 3 4 5 6 7 |
> db.restaurants.find( { "borough": "Manhattan" } ) > db.restaurants.find( { "address.zipcode": "10075" } ) // 埋め込みドキュメント中のフィールド > db.restaurants.find( { "grades.grade": "B" } ) // 配列中のフィールド > db.restaurants.find( { "grades.score": { $gt: 30 } } ) // コンディション指定 > db.restaurants.find( { "grades.score": { $lt: 10 } } ) > db.restaurants.find( { "cuisine": "Italian", "address.zipcode": "10075" } ) // AND条件 > db.restaurants.find( { $or: [ { "cuisine": "Italian" }, { "address.zipcode": "10075" } ] } ) // OR条件 |
ソート (1: ascending, -1: descending)
1 |
> db.restaurants.find().sort( { "borough": 1, "address.zipcode": 1 } ) |
更新
1 2 3 4 5 6 7 8 |
> db.restaurants.update( ... { "name" : "Juni" }, // ドキュメント指定 ... { ... $set: { "cuisine": "American (New)" }, // トップレベルフィールドの更新 ... $currentDate: { "lastModified": true } // 現在時刻セット ... } ... ) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) |
1 2 3 4 5 |
> db.restaurants.update( ... { "restaurant_id" : "41156888" }, // ドキュメント指定 ... { $set: { "address.street": "East 31st Street" } } // 埋め込みフィールドの更新 ... ) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) |
1 2 3 4 5 6 7 8 9 |
> db.restaurants.update( ... { "address.zipcode": "10016", cuisine: "Other" }, ... { ... $set: { cuisine: "Category To Be Determined" }, ... $currentDate: { "lastModified": true } ... }, ... { multi: true} // 複数ドキュメントの更新 ... ) WriteResult({ "nMatched" : 20, "nUpserted" : 0, "nModified" : 20 }) |
ドキュメントの置換 – update()の第二引数に新しいドキュメントを指定する
1 2 3 4 5 6 7 8 9 10 11 12 13 |
> db.restaurants.update( ... { "restaurant_id" : "41704620" }, ... { ... "name" : "Vella 2", ... "address" : { ... "coord" : [ -73.9557413, 40.7720266 ], ... "building" : "1480", ... "street" : "2 Avenue", ... "zipcode" : "10075" ... } ... } ... ) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) |
ドキュメントの削除 (1件)
1 2 |
> db.restaurants.remove( { "borough": "Queens" }, { justOne: true } ) WriteResult({ "nRemoved" : 1 }) |
ドキュメントの削除 (全件)
1 2 |
> db.restaurants.remove( { } ) WriteResult({ "nRemoved" : 25359 }) |
コレクションの削除
1 2 |
> db.restaurants.drop() true |
グルーピング
1 2 3 4 5 6 7 8 9 10 11 |
> db.restaurants.aggregate( ... [ ... { $group: { "_id": "$borough", "count": { $sum: 1 } } } ... ] ... ); { "_id" : "Missing", "count" : 51 } { "_id" : "Staten Island", "count" : 969 } { "_id" : "Brooklyn", "count" : 6086 } { "_id" : "Bronx", "count" : 2338 } { "_id" : "Queens", "count" : 5656 } { "_id" : "Manhattan", "count" : 10259 } |
絞り込み結果をグルーピング
1 2 3 4 5 6 7 8 9 10 11 |
> db.restaurants.aggregate( ... [ ... { $match: { "borough": "Queens", "cuisine": "Brazilian" } }, ... { $group: { "_id": "$address.zipcode" , "count": { $sum: 1 } } } ... ] ... ); { "_id" : "11377", "count" : 1 } { "_id" : "11103", "count" : 1 } { "_id" : "11106", "count" : 3 } { "_id" : "11368", "count" : 1 } { "_id" : "11101", "count" : 2 } |
インデックス作成 (シングルフィールド)
1 2 3 4 5 6 7 |
> db.restaurants.createIndex( { "cuisine": 1 } ) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } |
インデックス作成 (複合)
1 2 3 4 5 6 7 |
> db.restaurants.createIndex( { "cuisine": 1, "address.zipcode": -1 } ) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 } |