mongoDBの使い方
| 登録日 | :2025/01/29 06:08 |
|---|---|
| カテゴリ | :Linux |
mongoシェルを起動する
$mongo
MongoDB shell version v4.4.29
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("63a03079-6940-4385-90d3-e21685610339") }
MongoDB server version: 4.4.29
mongoシェルでは、JavaScriptが使用できる
> 1+2
3
> "hello".toUpperCase()
HELLO
>
データベースの初期状態
> db
test
>
> show databases
admin 0.000GB
config 0.000GB
local 0.000GB
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
>
新しいデータベースを作成する
使用するデータベースをuseで選択し、もしなければ作成される。
> use animalShelter
switched to db animalShelter
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> db
animalShelter
>
mongoシェルを終了するときは、「contrl + c」
BSONとは
BSONは、バイナリ版のJSON。
1.データの挿入(insert): Create
db.collection.insertOne() : 1つ
db.collection.insertMany() : 複数
db.collection.insert() : 1つでも、複数でも扱える
1つ挿入するときの例)データは、JavaScriptのオブジェクトを使って挿入する(Jsonで記述する必要はない)
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> use animalShelter
switched to db animalShelter
> db
animalShelter
> show collections
> db.dogs.insertOne({name: 'Pochi', age: 3, breed: 'corgi', catFriendly: true})
{
"acknowledged" : true,
"insertedId" : ObjectId("67994a3bb4aa33ea67b3fee2")
}
> show collections
dogs
> db.dogs.find()
{ "_id" : ObjectId("67994a3bb4aa33ea67b3fee2"), "name" : "Pochi", "age" : 3, "breed" : "corgi", "catFriendly" : true }
>
insertを使う例)1つでも、複数でも扱える
> db.dogs.insert([{name: 'Hachi', breed: 'golden', age: 14, catFriendly: false},{name: 'Choco', breed: 'chihuahua', age: 17, catFriendly: true}])
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
>
> db.dogs.find()
{ "_id" : ObjectId("67994a3bb4aa33ea67b3fee2"), "name" : "Pochi", "age" : 3, "breed" : "corgi", "catFriendly" : true }
{ "_id" : ObjectId("67994bfab4aa33ea67b3fee3"), "name" : "Hachi", "breed" : "golden", "age" : 14, "catFriendly" : false }
{ "_id" : ObjectId("67994bfab4aa33ea67b3fee4"), "name" : "Choco", "breed" : "chihuahua", "age" : 17, "catFriendly" : true }
>
> db.cats.insert({name: 'Tama', age: 6, dogFriendly: false, breed: 'scottish fold'})
WriteResult({ "nInserted" : 1 })
> db.cats.find()
{ "_id" : ObjectId("67994c75b4aa33ea67b3fee5"), "name" : "Tama", "age" : 6, "dogFriendly" : false, "breed" : "scottish fold" }
>
> show dbs
admin 0.000GB
animalShelter 0.000GB
config 0.000GB
local 0.000GB
>
2.データの取得(find) : Read
db.collection.find(query, projection)
引数なしは、全データの取得
> db.dogs.find()
{ "_id" : ObjectId("67994a3bb4aa33ea67b3fee2"), "name" : "Pochi", "age" : 3, "breed" : "corgi", "catFriendly" : true }
{ "_id" : ObjectId("67994bfab4aa33ea67b3fee3"), "name" : "Hachi", "breed" : "golden", "age" : 14, "catFriendly" : false }
{ "_id" : ObjectId("67994bfab4aa33ea67b3fee4"), "name" : "Choco", "breed" : "chihuahua", "age" : 17, "catFriendly" : true }
> db.cats.find()
{ "_id" : ObjectId("67994c75b4aa33ea67b3fee5"), "name" : "Tama", "age" : 6, "dogFriendly" : false, "breed" : "scottish fold" }
>
特定のデータを取得する。引数にオブジェクトを渡す。
> db.dogs.find({breed: 'corgi'})
{ "_id" : ObjectId("67994a3bb4aa33ea67b3fee2"), "name" : "Pochi", "age" : 3, "breed" : "corgi", "catFriendly" : true }
>
#完全一致なので、大文字になるとデータマッチしない
> db.dogs.find({breed: 'Corgi'})
>
#複数ヒットすることも可能
> db.dogs.find({catFriendly: true})
{ "_id" : ObjectId("67994a3bb4aa33ea67b3fee2"), "name" : "Pochi", "age" : 3, "breed" : "corgi", "catFriendly" : true }
{ "_id" : ObjectId("67994bfab4aa33ea67b3fee4"), "name" : "Choco", "breed" : "chihuahua", "age" : 17, "catFriendly" : true }
>
最初の一つだけ欲しい場合は、findOne
> db.dogs.findOne({catFriendly: true})
{
"_id" : ObjectId("67994a3bb4aa33ea67b3fee2"),
"name" : "Pochi",
"age" : 3,
"breed" : "corgi",
"catFriendly" : true
}
>
返ってくるデータは、cursorである。(結果を指し示すポインタのようなもの)
複数の条件もできる
> db.dogs.find({catFriendly: true, age: 17})
{ "_id" : ObjectId("67994bfab4aa33ea67b3fee4"), "name" : "Choco", "breed" : "chihuahua", "age" : 17, "catFriendly" : true }
>
> db.dogs.findOne({catFriendly: true, age: 17})
{
"_id" : ObjectId("67994bfab4aa33ea67b3fee4"),
"name" : "Choco",
"breed" : "chihuahua",
"age" : 17,
"catFriendly" : true
}
>
3.データの更新 () Update
db.collection.updateOne(
一つの要素の更新:db.collection.updateOne()
> db.dogs.updateOne({name: 'Pochi'}, {$set: {age: 4}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.dogs.find({name: 'Pochi'})
{ "_id" : ObjectId("67994a3bb4aa33ea67b3fee2"), "name" : "Pochi", "age" : 4, "breed" : "corgi", "catFriendly" : true }
>
複数の値も更新できる
>
> db.dogs.updateOne({name: 'Pochi'}, {$set: {age: 5, breed: 'lab'}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.dogs.find({name: 'Pochi'})
{ "_id" : ObjectId("67994a3bb4aa33ea67b3fee2"), "name" : "Pochi", "age" : 5, "breed" : "lab", "catFriendly" : true }
>
#新しいキーの追加もできる
> db.dogs.updateOne({name: 'Pochi'}, {$set: {color: 'chocolate'}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.dogs.find({name: 'Pochi'})
{ "_id" : ObjectId("67994a3bb4aa33ea67b3fee2"), "name" : "Pochi", "age" : 5, "breed" : "lab", "catFriendly" : true, "color" : "chocolate" }
>
複数の要素の更新:db.collection.updateMany()
> db.dogs.find()
{ "_id" : ObjectId("67994a3bb4aa33ea67b3fee2"), "name" : "Pochi", "age" : 5, "breed" : "lab", "catFriendly" : true, "color" : "chocolate" }
{ "_id" : ObjectId("67994bfab4aa33ea67b3fee3"), "name" : "Hachi", "breed" : "golden", "age" : 14, "catFriendly" : false }
{ "_id" : ObjectId("67994bfab4aa33ea67b3fee4"), "name" : "Choco", "breed" : "chihuahua", "age" : 17, "catFriendly" : true }
>
> db.dogs.updateMany({catFriendly: true}, {$set: {isAvailable: false}})
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }
> db.dogs.find()
{ "_id" : ObjectId("67994a3bb4aa33ea67b3fee2"), "name" : "Pochi", "age" : 5, "breed" : "lab", "catFriendly" : true, "color" : "chocolate", "isAvailable" : false }
{ "_id" : ObjectId("67994bfab4aa33ea67b3fee3"), "name" : "Hachi", "breed" : "golden", "age" : 14, "catFriendly" : false }
{ "_id" : ObjectId("67994bfab4aa33ea67b3fee4"), "name" : "Choco", "breed" : "chihuahua", "age" : 17, "catFriendly" : true, "isAvailable" : false }
>
使用可能なオプション例
更新日時を追加する
> db.cats.find()
{ "_id" : ObjectId("67994c75b4aa33ea67b3fee5"), "name" : "Tama", "age" : 6, "dogFriendly" : false, "breed" : "scottish fold" }
> db.cats.updateOne({age: 6}, {$set: {age: 7}, $currentDate: {lastChanged: true}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.cats.find()
{ "_id" : ObjectId("67994c75b4aa33ea67b3fee5"), "name" : "Tama", "age" : 7, "dogFriendly" : false, "breed" : "scottish fold", "lastChanged" : ISODate("2025-01-28T21:59:04.123Z") }
>
replaceOneは、オブジェクトを完全に入れ替える。
4.データの削除 () Delete
db.collection.deleteMany()
db.collection.deleteOne()
一つを削除
> db.cats.find()
{ "_id" : ObjectId("67994c75b4aa33ea67b3fee5"), "name" : "Tama", "age" : 7, "dogFriendly" : false, "breed" : "scottish fold", "lastChanged" : ISODate("2025-01-28T21:59:04.123Z") }
> db.cats.deleteOne({name: 'Tama'})
{ "acknowledged" : true, "deletedCount" : 1 }
> db.cats.find()
>
複数を削除
> db.dogs.find()
{ "_id" : ObjectId("67994a3bb4aa33ea67b3fee2"), "name" : "Pochi", "age" : 5, "breed" : "lab", "catFriendly" : true, "color" : "chocolate", "isAvailable" : false }
{ "_id" : ObjectId("67994bfab4aa33ea67b3fee3"), "name" : "Hachi", "breed" : "golden", "age" : 14, "catFriendly" : false }
{ "_id" : ObjectId("67994bfab4aa33ea67b3fee4"), "name" : "Choco", "breed" : "chihuahua", "age" : 17, "catFriendly" : true, "isAvailable" : false }
> db.dogs.deleteMany({isAvailable: false})
{ "acknowledged" : true, "deletedCount" : 2 }
> db.dogs.find()
{ "_id" : ObjectId("67994bfab4aa33ea67b3fee3"), "name" : "Hachi", "breed" : "golden", "age" : 14, "catFriendly" : false }
>
全部一気に削除する場合
> db.dogs.insert({name: 'aaa'})
WriteResult({ "nInserted" : 1 })
> db.dogs.find()
{ "_id" : ObjectId("67994bfab4aa33ea67b3fee3"), "name" : "Hachi", "breed" : "golden", "age" : 14, "catFriendly" : false }
{ "_id" : ObjectId("6799547ab4aa33ea67b3fee6"), "name" : "aaa" }
> db.dogs.deleteMany({})
{ "acknowledged" : true, "deletedCount" : 2 }
> db.dogs.find()
>
Appendix そのほかの演算子
ネストしたプロパティで検索する
db.dogs.find({'personality.childeFriendly': true})
比較演算子を使う
db.dogs.find({age: {$gt :8})
db.dogs.find({age: {$gte :10})
db.dogs.find({age: {$lt :10})
範囲指定で検索する
db.dogs.find({breed: {$in: ['Shiba', 'Corgi', 'Chihuahua']}})
db.dogs.find({breed: {$in: ['Shiba', 'Corgi', 'Chihuahua']}, age: {$lt: 10}})
否定で検索する
db.dogs.find({qty: { $ne: 20}})
db.dogs.find({breed: {$nin: ['Shiba', 'Corgi', 'Chihuahua']}})
論理演算子
db.dogs.find({$or: [{'personality.catFriendly': true}, {age : {$lte: 2}}]})