์ค์น๋ ๊ณต์๋ฌธ์, command๋ MongoDB In 30 Minutes by Traversy Media channel ์ ํ๋ธ ์์์ ์ฐธ๊ณ ํ๋ค.
๋งํฌ์ ๊ฐ๋จํ ๊ฐ์ด๋๊ฐ ๋์์๋ค. community edition์ ์ค์นํ๋ฉด ๋๊ณ , ์ค์นํ๊ธฐ ์ ๋งฅ ๊ธฐ์ค์ผ๋ก xcode, brew๊ฐ ๊น๋ ค ์์ด์ผ ํ๋ค.
์ ๋๊ฐ๊ฐ ์ค์น๋ ๊ฒ์ ๊ธฐ์ค์ผ๋ก ์๋ ๋ช
๋ น์ด๋ฅผ ํฐ๋ฏธ๋์ ์
๋ ฅํ๋ฉด ์ค์น๋๊ณ ์ดํ mongo
๋ฅผ ์
๋ ฅํ๋ฉด db๋ฅผ ์คํํ ์ ์๋ค.
brew tap mongodb/brew
brew install mongodb-community@4.4
๋๋ xcode๋ฅผ ์ฐ์ง๋ ์๊ณ ๊ดํ ์ฉ๋๋ง ์ฐจ์งํ๋ ๊ฒ ๊ฐ์์ ์ง์ฐ๊ณ ์๋ค๊ฐ ๊ณ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ฑ์คํ ์ด์์ ๋ค์ ๊น์๋๋ฐ ์๊ฐ์ด ์์ด๋ ๊ฒ ์ค๋ ๊ฑธ๋ฆฌ๋์ง...๐
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๊ณผ ์ ์ฌํ ๊ฐ๋ . Document & record๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
ํ๋์ record์ด๋ฉฐ, field:value๋ก ๊ตฌ์ฑ๋์ด ์๋ค. (์ด๋ฏธ์ง ์ถ์ฒ: ๊ณต์๋ฌธ์)
uniqe value๋ก์ document๋ฅผ ์ฐพ๋ ์ฉ๋ ๋ฑ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋ ์์ฑ๋๋ค. ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ฒ๋ผ auto-increment๋๋ primary key๊ฐ ์์ด๋ ๋๋ ์ด์ !
python์ ์ฐ๋ค๊ฐ ๋ณด๋๊น ํท๊ฐ๋ ค์, {}๊ฐ ๊ฐ์ฒด=object, []๊ฐ ๋ฐฐ์ด=array๋ค.
db.createUser() ๊ด๋ จ ๊ณต์ ๋ฌธ์ ์ค๋ช , ๋ฐ๋์ ๋ชจ๋ key๊ฐ์ ๊ฐ์ง ํ์๋ ์๋ค. ํ์์ ๋ฐ๋ผ์ ๊ตฌ์ฑํ๋ฉด ๋จ!
// user ๋ง๋ค๊ธฐ
> db.createUser({
... user:"yeni",
... pwd:"1234",
... roles: ["readWrite", "dbAdmin"]
... });
// collection ์์ฑ
> db.createCollection('customers');
{ "ok" : 1 }
// collections ์กฐํ
> show collections
customers
// ๋ฐ์ดํฐ ๋ฃ๊ธฐ
> db.customers.insert({first_name:"Yeeun", last_name:"Lee"});
WriteResult({ "nInserted" : 1 })
// ๋ณต์์ ๋ฐ์ดํฐ ๋ฃ๊ธฐ: array ์์!
> db.customers.insert([{first_name:"John", last_name:"Doe"},
{first_name:"Steven", last_name:"Smith", gender:"male"}]);
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
์๋ field๋ฅผ ์ ๋ฐ์ดํธํ ๊ฒฝ์ฐ ์๋ฌด ๊ฒฐ๊ณผ๋ ๋ฐ์๋์ง ์์ง๋ง, upsert option์ ์ถ๊ฐํ๋ฉด ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๋ค.
> db.customers.update({first_name:"Mary"},
{first_name:"Mary", last_name:"Samson"},
{upsert:true}); // upsert = true ์ค์
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("5f32758fbf762656882f2068")
})
> db.customers.find().pretty();
{
"_id" : ObjectId("5f32758fbf762656882f2068"),
"first_name" : "Mary",
"last_name" : "Samson"
}
// ์กฐํ
> db.customers.find();
{ "_id" : ObjectId("5f325e13a7405fe8dbb33b91"), "first_name" : "Yeeun", "last_name" : "Lee" }
// ์์๊ฒ(?) ์กฐํ
> db.customers.find().pretty();
{
"_id" : ObjectId("5f325e13a7405fe8dbb33b91"),
"first_name" : "Yeeun",
"last_name" : "Lee"
}
// ์ด๋ฆ์ด Yeeun์ธ ๊ณ ๊ฐ ์ฐพ์์ค
> db.customers.find({first_name:"Yeeun"}).pretty();
{
"_id" : ObjectId("5f325e13a7405fe8dbb33b91"),
"first_name" : "Yeeun",
"last_name" : "Lee",
"gender" : "female"
}
์๋์ ๋ฐฉ๋ฒ์ ์ฐ๋ฉด first_name์ด John์ธ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฟ๋ฒ๋ฆฐ๋ค. ๊ทธ๋์ ๋ณดํต Unique value๋ฅผ ์ฌ์ฉํ์ง๋ง, first_name John์ด ์ค๋ณต๋์ง ์๊ณ ์์ด ๊ฐ์์์๋ first_name์ผ๋ก record๋ฅผ ์ ํํ๋ค.
// first_name์ด John์ธ record๋ฅผ ๋ค์ {}๋ก ๋ฐ๊ฟ์ค!
> db.customers.update({first_name:"John"},
{first_name:"John", last_name:"Doe", gender:"male"});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.customers.find().pretty();
{
"_id" : ObjectId("5f3261fca7405fe8dbb33b92"),
"first_name" : "John",
"last_name" : "Doe",
"gender" : "male" // ์ฑ๋ณ์ด ์ถ๊ฐ๋์๋ค.
}
์๋ ํน์ field๋ฅผ ๋ฃ์ผ๋ฉด ํด๋น key, value๋ฅผ ๊ฐ์ง record๊ฐ ์ง์์ง๊ณ , ๋น curly bracket์ ๋ฃ์ผ๋ฉด collection ์ ์ฒด๊ฐ ์ง์์ง๋ค.
> db.customers.remove({first_name:"John"});
WriteResult({ "nRemoved" : 1 })
์ง์ธ ๋ ํ๋๋ง ์ง์ฐ๋ ์ต์
> db.customers.remove({first_name:"Steven"}, {justOne:true});
WriteResult({ "nRemoved" : 0 })
๊ณต์ ๋ฌธ์ ์ฐธ๊ณ โ๏ธ
// ์ด๋ฆ์ด Yeeun์ด๊ฑฐ๋ John์ธ ๊ณ ๊ฐ ์ฐพ์์ค
> db.customers.find( {$or:[{first_name:"Yeeun"}, {first_name:"John"}]} ).pretty();
{
"_id" : ObjectId("5f325e13a7405fe8dbb33b91"),
"first_name" : "Yeeun",
"last_name" : "Lee",
"gender" : "female"
}
{
"_id" : ObjectId("5f3261fca7405fe8dbb33b92"),
"first_name" : "John",
"last_name" : "Doe",
"gender" : "male"
}
// ๋์ด๊ฐ 35๋ณด๋ค ํฐ ๊ณ ๊ฐ ์ฐพ์์ค
> db.customers.find({age:{$gt:35}}).pretty(); // greater than
{
"_id" : ObjectId("5f32758fbf762656882f2068"),
"first_name" : "Mary",
"last_name" : "Samson",
"gender" : "female",
"age" : 40
}
// ๋์ด๊ฐ 35๋ณด๋ค ์์ ๊ณ ๊ฐ ์ฐพ์์ค
> db.customers.find({age:{$lt:35}}).pretty(); // less than
{
"_id" : ObjectId("5f325e13a7405fe8dbb33b91"),
"first_name" : "Yeeun",
"last_name" : "Lee",
"gender" : "female",
"age" : 30
}
update์์ record ์ ํ ํ ๋ชจ๋ key, value๋ฅผ ์ ๋ ฅํด์ผ ํ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ $set์ ์ฌ์ฉํ๋ฉด ์ถ๊ฐํ๊ณ ์ ํ๋ key, value๋ง ๋ฃ์ ์ ์๋ค.
> db.customers.update({first_name:"Yeeun"}, {$set:{gender:"female"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.customers.find().pretty();
{
"_id" : ObjectId("5f325e13a7405fe8dbb33b91"),
"first_name" : "Yeeun",
"last_name" : "Lee",
"gender" : "female" // ์ฑ๋ณ๋ง ์ถ๊ฐ๋์๋ค.
}
ํน์ field๋ฅผ ์ง์์ค๋ค. 1์ json/bson syntax๋ก ํน๋ณํ ์๋ฏธ๋ ์๊ณ value๊ฐ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฅ ๋ฃ์ด์ค ๊ฒ(typicaly use)์ด๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค.
// age field ์ญ์
> db.customers.update({first_name:"Yeeun"}, {$unset:{age:1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.customers.find().pretty();
{
"_id" : ObjectId("5f325e13a7405fe8dbb33b91"),
"first_name" : "Yeeun",
"last_name" : "Lee",
"gender" : "female"
}
๋ฐ๋ณต๋ฌธ์ ๋๋ฆด ์ ์๋ค ๐ฎ sql๋ ์ฐพ์๋ณด๋ฉด ๋น์ทํ ๊ธฐ๋ฅ์ด ์๊ฒ ์ง๋ง, javascript ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค๋ณด๋ javascript function์ ์จ์ ์ข ์ ๊ธฐ...!
> db.customers.find().forEach(function(doc){print("Customer Name:" + doc.first_name)});
Customer Name:Yeeun
Customer Name:John
Customer Name:Mary
address key ์์ ๋ object๊ฐ ์๋๋ฐ, ์๊ฑฐ๋ฅผ Dot notation์ผ๋ก ์ ๊ทผ! key๊ฐ์๋ ""(quote)๋ฅผ ์ฐ๋ client๋ program์ด ์์ผ๋ ํ์ธํ๊ณ ์ธ ๊ฒ
> db.customers.find({"address.state":"MA"}).pretty();
{
"_id" : ObjectId("5f325e13a7405fe8dbb33b91"),
"first_name" : "Yeeun",
"last_name" : "Lee",
"gender" : "female",
"age" : 30,
"address" : {
"street" : "411 Blue st",
"city" : "Boston",
"state" : "MA"
}
}
์ซ์ value๋ฅผ update command๋ฅผ ํตํด ์ฆ๊ฐ์ํค๋ ๋ฐฉ๋ฒ !
> db.customers.update({first_name:"Yeeun"}, {$inc:{age:1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.customers.find().pretty();
{
"_id" : ObjectId("5f325e13a7405fe8dbb33b91"),
"first_name" : "Yeeun",
"last_name" : "Lee",
"gender" : "female",
"age" : 31
}
{
"_id" : ObjectId("5f3261fca7405fe8dbb33b92"),
"first_name" : "John",
"last_name" : "Doe",
"gender" : "male"
}
{
"_id" : ObjectId("5f3261fca7405fe8dbb33b93"),
"first_name" : "Steven",
"last_name" : "Smith",
"gender" : "male"
}
> db.customers.update({first_name:"Steven"},
{$rename: {"gender":"sex"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.customers.find().pretty();
{
"_id" : ObjectId("5f3261fca7405fe8dbb33b93"),
"first_name" : "Steven",
"last_name" : "Smith",
"sex" : "male" // key๊ฐ์ด ๋ฐ๋์๋ค
}
sort parameter์ value์์ 1์ ascending, -1์ descending option
> db.customers.find().sort({first_name:1});
db.customers.find().limit(4);
: 4๊ฐ๋ง ๋ณด์ฌ์คdb.customers.find().count();
: ๋ช๊ฐ์ผ?