설치는 인터넷이 자세히 나와 있으니 참고 하길 바란다.
맥 경우에는 brew으로 간편하게 설치도 가능하니 참고하길 바란다.
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/

우리는 간단하게 커멘드 창에서 CUD를 해보겠다. 몽고 서버와 몽고 클라이언트를 실행시키자. select는 공부할게 많으니 나중에 다시 해보겠다.

insert

> db.user.insert({ name: "wonwoo", age : 27, email: "test@test.com" } )
WriteResult({ "nInserted" : 1 })

nosql 이니 json으로 들어간다.

> db.user.insertOne({ name: "wonwoo1", age : 20, email: "test1@test.com" } )
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5767f41228dcf51e4b235173")
}

insertOne 도 insert가 가능하다. 다른점은 잘 모르겠다. 리턴이 다른건 확인이 가능한데.. 흠..

> db.user.insertMany([
  { name: "wonwoo2", age : 22, email: "test2@test.com"}, 
  { name: "wonwoo3", age : 32, email: "test3@test.com"}, 
  { name: "wonwoo4", age : 37, email: "test4@test.com"}])

{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("5767f58128dcf51e4b235174"),
        ObjectId("5767f58128dcf51e4b235175"),
        ObjectId("5767f58128dcf51e4b235176")
    ]
}

다중 insert도 가능하다. insertMany를 이용하면 된다.

update

몽고 사이트에서 예제로 있는 것을 해보자.

db.users.insertMany(
   [
     {
       _id: 1,
       name: "sue",
       age: 19,
       type: 1,
       status: "P",
       favorites: { artist: "Picasso", food: "pizza" },
       finished: [ 17, 3 ],
       badges: [ "blue", "black" ],
       points: [
          { points: 85, bonus: 20 },
          { points: 85, bonus: 10 }
       ]
     },
     {
       _id: 2,
       name: "bob",
       age: 42,
       type: 1,
       status: "A",
       favorites: { artist: "Miro", food: "meringue" },
       finished: [ 11, 25 ],
       badges: [ "green" ],
       points: [
          { points: 85, bonus: 20 },
          { points: 64, bonus: 12 }
       ]
     },
     {
       _id: 3,
       name: "ahn",
       age: 22,
       type: 2,
       status: "A",
       favorites: { artist: "Cassatt", food: "cake" },
       finished: [ 6 ],
       badges: [ "blue", "Picasso" ],
       points: [
          { points: 81, bonus: 8 },
          { points: 55, bonus: 20 }
       ]
     },
     {
       _id: 4,
       name: "xi",
       age: 34,
       type: 2,
       status: "D",
       favorites: { artist: "Chagall", food: "chocolate" },
       finished: [ 5, 11 ],
       badges: [ "Picasso", "black" ],
       points: [
          { points: 53, bonus: 15 },
          { points: 51, bonus: 15 }
       ]
     },
     {
       _id: 5,
       name: "xyz",
       age: 23,
       type: 2,
       status: "D",
       favorites: { artist: "Noguchi", food: "nougat" },
       finished: [ 14, 6 ],
       badges: [ "orange" ],
       points: [
          { points: 71, bonus: 20 }
       ]
     },
     {
       _id: 6,
       name: "abc",
       age: 43,
       type: 1,
       status: "A",
       favorites: { food: "pizza", artist: "Picasso" },
       finished: [ 18, 12 ],
       badges: [ "black", "blue" ],
       points: [
          { points: 78, bonus: 8 },
          { points: 57, bonus: 7 }
       ]
     }
   ]
)

업데이트를 해보자.

> db.users.updateOne(
...    { "favorites.artist": "Picasso" },
...    {
...      $set: { "favorites.food": "pie", type: 3 },
...      $currentDate: { lastModified: true }
...    }
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

favorites 안에 artist의 명이 Picasso인 것을 favorites.foods는 pie로 바꾸고 type은 3으로 업데이틀 한다. 그리고 lastModified를 현재 시간으로 업데이트 한다.

> db.users.findOne({"_id" : 1})
{
    "_id" : 1,
    "name" : "sue",
    "age" : 19,
    "type" : 3,
    "status" : "P",
    "favorites" : {
        "artist" : "Picasso",
        "food" : "pie"
    },
    "finished" : [
        17,
        3
    ],
    "badges" : [
        "blue",
        "black"
    ],
    "points" : [
        {
            "points" : 85,
            "bonus" : 20
        },
        {
            "points" : 85,
            "bonus" : 10
        }
    ],
    "lastModified" : ISODate("2016-06-20T14:04:50.252Z")
}

findOne으로 아이디가 1인것을 찾으면 이렇게 업데이트가 되어 있다. 근데 이상하다 id가 6인 것도 favorites.artist 똑같이 Picasso 인데 업데이트 되지 않았다. 모두다 업데이트 하고 싶다면 updateMany를 사용하면 된다.

> db.users.updateMany(
...    { "favorites.artist": "Picasso" },
...    {
...      $set: { "favorites.artist": "Pisanello", type: 3 },
...      $currentDate: { lastModified: true }
...    }
... )
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }

modifiedCount가 2인 것을 확인할 수 있다. 다시 확인 해보자.

> db.users.findOne({"_id" : 6})
{
    "_id" : 6,
    "name" : "abc",
    "age" : 43,
    "type" : 3,
    "status" : "A",
    "favorites" : {
        "food" : "pizza",
        "artist" : "Pisanello"
    },
    "finished" : [
        18,
        12
    ],
    "badges" : [
        "black",
        "blue"
    ],
    "points" : [
        {
            "points" : 78,
            "bonus" : 8
        },
        {
            "points" : 57,
            "bonus" : 7
        }
    ],
    "lastModified" : ISODate("2016-06-20T14:15:04.696Z")
}

아디디가 6인 것도 변경 되었다.

delete

delete 도 간단하다.

> db.users.deleteOne( { status: "D" } )
{ "acknowledged" : true, "deletedCount" : 1 }

deleteOne을 이용하여 status 가 “D” 인 것을 삭제 하였다. update와 마찬가지로 처음 나오는 것만 삭제하고 나머지는 삭제 하지 않는다. 모두 삭제 하고 싶다면 아래와 같이 deleteMany를 이용하면 된다.

> db.users.deleteMany({ status : "A" })
{ "acknowledged" : true, "deletedCount" : 3 }

deleteMany를 이용하여 status가 “A”인 것을 모두 삭제 하였다.

db.users.find()

위와 같이 find()를 이용하여 확인해보면 status가 “A”인 것은 모두 삭제 되었다.

> db.users.remove({})
WriteResult({ "nRemoved" : 6 })

> db.users.deleteMany({})
{ "acknowledged" : true, "deletedCount" : 6 }

remove와 deleteMany를 이용하여 모두 삭제 할 수 있다. 이것 역시 다른 점이 있다면 리턴타입이 다르다. 그 이외는 잘 모르겠다.

현재 진행한 CUD 말고 API가 몇개 더 있지만 자주 사용하는 것만 작성했다. 더 궁금하다면 레퍼런스를 참고 하길 바란다.
다음시간에는 select의 대해서 알아보자. 뭘 하든 select는 양이 많으니 ….

이상하게 위의 update 데이터중 커멘드 창에서 6개를 한꺼번에 넣으니까 에러가 발생한다. 커멘드라 찾기도 귀찮아서 나눠서 넣었다.

예제 )

db.users.insertMany(
   [
     {
       _id: 1,
       name: "sue",
       age: 19,
       type: 1,
       status: "P",
       favorites: { artist: "Picasso", food: "pizza" },
       finished: [ 17, 3 ],
       badges: [ "blue", "black" ],
       points: [
          { points: 85, bonus: 20 },
          { points: 85, bonus: 10 }
       ]
     },
     {
       _id: 2,
       name: "bob",
       age: 42,
       type: 1,
       status: "A",
       favorites: { artist: "Miro", food: "meringue" },
       finished: [ 11, 25 ],
       badges: [ "green" ],
       points: [
          { points: 85, bonus: 20 },
          { points: 64, bonus: 12 }
       ]
     },
     {
       _id: 3,
       name: "ahn",
       age: 22,
       type: 2,
       status: "A",
       favorites: { artist: "Cassatt", food: "cake" },
       finished: [ 6 ],
       badges: [ "blue", "Picasso" ],
       points: [
          { points: 81, bonus: 8 },
          { points: 55, bonus: 20 }
       ]
     }
  ]
)
db.users.insertMany(
   [
     {
       _id: 4,
       name: "xi",
       age: 34,
       type: 2,
       status: "D",
       favorites: { artist: "Chagall", food: "chocolate" },
       finished: [ 5, 11 ],
       badges: [ "Picasso", "black" ],
       points: [
          { points: 53, bonus: 15 },
          { points: 51, bonus: 15 }
       ]
     },
     {
       _id: 5,
       name: "xyz",
       age: 23,
       type: 2,
       status: "D",
       favorites: { artist: "Noguchi", food: "nougat" },
       finished: [ 14, 6 ],
       badges: [ "orange" ],
       points: [
          { points: 71, bonus: 20 }
       ]
     },
     {
       _id: 6,
       name: "abc",
       age: 43,
       type: 1,
       status: "A",
       favorites: { food: "pizza", artist: "Picasso" },
       finished: [ 18, 12 ],
       badges: [ "black", "blue" ],
       points: [
          { points: 78, bonus: 8 },
          { points: 57, bonus: 7 }
       ]
     }
   ]
)