[MongoDB] CRUD

HYEOB KIM·2023년 11월 7일
0

mongoDB

목록 보기
1/1
db.flightData.insertOne(
{
	"departureAirport": "MUC",
	"arrivalAirport": "SFO",
	"aircraft": "Airbus A380",
	"distance": 12000,
	"intercontinetal": true
})

db.flightData.insertOne(
{
	"departureAirport": "LHR",
	"arrivalAirport": "TXL",
	"aircraft": "Airbus A320",
	"distance": 950,
	"intercontinetal": false
})

db.flightData.insertMany(
[
  {
    "departureAirport": "MUC",
    "arrivalAirport": "SFO",
    "aircraft": "Airbus A380",
    "distance": 12000,
    "intercontinental": true
  },
  {
    "departureAirport": "LHR",
    "arrivalAirport": "TXL",
    "aircraft": "Airbus A320",
    "distance": 950,
    "intercontinental": false
  }
])
db.flightData.insertMany([{
	"departureAirport" : "TXL",
	"arrivalAirport": "LHR"
},
{
	"departureAirport" : "TXL",
	"arrivalAirport": "LHR"
}])
db.flightData.deleteOne({ departureAirport: "TXL" })
db.flightData.updateOne(
{ 
	"departureAirport" : "TXL" 
}, 
{
	$set: 
	{
		marker: "delete"
	}
})

db.flightData.updateMany(
{
	"departureAirport" : "TXL"
}, 
{
	$set: 
	{
		marker: "toDelete"
	}
})

db.flightData.updateOne(
{
	markder: 
	{
		$exists: true
	}
},
{
	$unset:
	{
		markder: true
	}
}
)

db.flightData.deleteMany(
{
	marker: "toDelete"
}
)
db.flightData.find(
{
	distance:
	{
		$gt: 10000
	}
}).pretty()

db.flightData.findOne(
{
	distance:
	{
		$gt: 900
	}
})

db.flightData.updateOne(
{
	"intercontinetal" : true
},
{
	$set:
	{
		"delay": false
	}
})
-- 오류 발생
db.flightData.updateOne(
{
	"intercontinetal" : true
},
{
	"delay": true
})

--> updateOne or updateMany를 사용할 경우 $set을 이용해야 함
$set : 해당 필드의 key, value가 없으면 생성. 
key가 있을 경우 value값이 다르면 변경, 
value 값이 같으면 유지

-- 변경(delay: true에 대한 정보만 남고 나머지는 덮어씌워짐)
db.flightData.update(
{
	"intercontinetal" : true
},
{
	"delay": true
})

--> update, insert, remove보다는 
updateOne, updateMany, insertOne, insertMany, deleteOne, deleteMany를 사용하길 권장

db.flightData.findOne(
{
	distance:
	{
		$gt: 950
	}
})
db.passengers.insertMany(
[
  {
    "name": "Max Schwarzmueller",
    "age": 29
  },
  {
    "name": "Manu Lorenz",
    "age": 30
  },
  {
    "name": "Chris Hayton",
    "age": 35
  },
  {
    "name": "Sandeep Kumar",
    "age": 28
  },
  {
    "name": "Maria Jones",
    "age": 30
  },
  {
    "name": "Alexandra Maier",
    "age": 27
  },
  {
    "name": "Dr. Phil Evans",
    "age": 47
  },
  {
    "name": "Sandra Brugge",
    "age": 33
  },
  {
    "name": "Elisabeth Mayr",
    "age": 29
  },
  {
    "name": "Frank Cube",
    "age": 41
  },
  {
    "name": "Karandeep Alun",
    "age": 48
  },
  {
    "name": "Michaela Drayer",
    "age": 39
  },
  {
    "name": "Bernd Hoftstadt",
    "age": 22
  },
  {
    "name": "Scott Tolib",
    "age": 44
  },
  {
    "name": "Freddy Melver",
    "age": 41
  },
  {
    "name": "Alexis Bohed",
    "age": 35
  },
  {
    "name": "Melanie Palace",
    "age": 27
  },
  {
    "name": "Armin Glutch",
    "age": 35
  },
  {
    "name": "Klaus Arber",
    "age": 53
  },
  {
    "name": "Albert Twostone",
    "age": 68
  },
  {
    "name": "Gordon Black",
    "age": 38
  }
])
--find()와 find().toArray(), find().forEach()의 차이
db.passengers.find()  ------> 20개만 보여줌
db.passengers.find().toArray()  ------> 모두 가져와서 배열로 보여줌
db.passengers.find().forEach((passengerData) => {printjson(passengerData)})   ------> 모두 Document로 보여줌
-> collections 전체의 document를 하나씩 보면서 passengerData에 넣고 passengerData를 json 형식으로 출력


-- Projection(특정 Field만 select, 보여주고 싶은 Field의 key에 value를 1로 주면 보여지고, 0으로 주면 보여주지 않습니다)
db.passengers.find({},{name: 1}).pretty()
{
        "_id" : ObjectId("6549d1208e72769dd043ae1a"),
        "name" : "Max Schwarzmueller"
}
{ "_id" : ObjectId("6549d1208e72769dd043ae1b"), "name" : "Manu Lorenz" }
{ "_id" : ObjectId("6549d1208e72769dd043ae1c"), "name" : "Chris Hayton" }
{ "_id" : ObjectId("6549d1208e72769dd043ae1d"), "name" : "Sandeep Kumar" }
{ "_id" : ObjectId("6549d1208e72769dd043ae1e"), "name" : "Maria Jones" }
{ "_id" : ObjectId("6549d1208e72769dd043ae1f"), "name" : "Alexandra Maier" }
{ "_id" : ObjectId("6549d1208e72769dd043ae20"), "name" : "Dr. Phil Evans" }
{ "_id" : ObjectId("6549d1208e72769dd043ae21"), "name" : "Sandra Brugge" }
{ "_id" : ObjectId("6549d1208e72769dd043ae22"), "name" : "Elisabeth Mayr" }
{ "_id" : ObjectId("6549d1208e72769dd043ae23"), "name" : "Frank Cube" }
{ "_id" : ObjectId("6549d1208e72769dd043ae24"), "name" : "Karandeep Alun" }
{ "_id" : ObjectId("6549d1208e72769dd043ae25"), "name" : "Michaela Drayer" }
{ "_id" : ObjectId("6549d1208e72769dd043ae26"), "name" : "Bernd Hoftstadt" }
{ "_id" : ObjectId("6549d1208e72769dd043ae27"), "name" : "Scott Tolib" }
{ "_id" : ObjectId("6549d1208e72769dd043ae28"), "name" : "Freddy Melver" }
{ "_id" : ObjectId("6549d1208e72769dd043ae29"), "name" : "Alexis Bohed" }
{ "_id" : ObjectId("6549d1208e72769dd043ae2a"), "name" : "Melanie Palace" }
{ "_id" : ObjectId("6549d1208e72769dd043ae2b"), "name" : "Armin Glutch" }
{ "_id" : ObjectId("6549d1208e72769dd043ae2c"), "name" : "Klaus Arber" }
{ "_id" : ObjectId("6549d1208e72769dd043ae2d"), "name" : "Albert Twostone" }
Type "it" for more

db.passengers.find({},{name: 1, _id: 0}).pretty()
{ "name" : "Max Schwarzmueller" }
{ "name" : "Manu Lorenz" }
{ "name" : "Chris Hayton" }
{ "name" : "Sandeep Kumar" }
{ "name" : "Maria Jones" }
{ "name" : "Alexandra Maier" }
{ "name" : "Dr. Phil Evans" }
{ "name" : "Sandra Brugge" }
{ "name" : "Elisabeth Mayr" }
{ "name" : "Frank Cube" }
{ "name" : "Karandeep Alun" }
{ "name" : "Michaela Drayer" }
{ "name" : "Bernd Hoftstadt" }
{ "name" : "Scott Tolib" }
{ "name" : "Freddy Melver" }
{ "name" : "Alexis Bohed" }
{ "name" : "Melanie Palace" }
{ "name" : "Armin Glutch" }
{ "name" : "Klaus Arber" }
{ "name" : "Albert Twostone" }
Type "it" for more

db.passengers.find({},{name: 1, _id: 0}).forEach((passengerData) => {printjson(passengerData)})
{ "name" : "Max Schwarzmueller" }
{ "name" : "Manu Lorenz" }
{ "name" : "Chris Hayton" }
{ "name" : "Sandeep Kumar" }
{ "name" : "Maria Jones" }
{ "name" : "Alexandra Maier" }
{ "name" : "Dr. Phil Evans" }
{ "name" : "Sandra Brugge" }
{ "name" : "Elisabeth Mayr" }
{ "name" : "Frank Cube" }
{ "name" : "Karandeep Alun" }
{ "name" : "Michaela Drayer" }
{ "name" : "Bernd Hoftstadt" }
{ "name" : "Scott Tolib" }
{ "name" : "Freddy Melver" }
{ "name" : "Alexis Bohed" }
{ "name" : "Melanie Palace" }
{ "name" : "Armin Glutch" }
{ "name" : "Klaus Arber" }
{ "name" : "Albert Twostone" }
{ "name" : "Gordon Black" }

Document 안에 Document가 들어갈 수 있고
중첩 레벨은 100까지 가능
하나의 Document는 16MB까지
텍스트만 저장

-- Embedded Document
db.flightData.updateMany({}, {$set: {"status": {"description": "on-time", "lastUpdated": "1 hour ago"}}})
db.flightData.updateMany({}, {$set: {"status": {"description": "on-time", "lastUpdated": "1 hour ago", "details": {responsible: "Max Schwarzmueller"}}}})
db.flightData.find({},{"status.description": 1})
db.flightData.find({},{"_id":0, "status.description": 1})
db.flightData.find({"status.description": "on-time"}).pretty()

-- Embedded Array
db.passengers.updateOne({name: "Albert Twostone"}, {$set: {hobbies: ["sports", "cooking"]}})
db.passengers.findOne({name: "Albert Twostone"}).hobbies
db.passengers.findOne({hobbies: "sports"})
profile
Devops Engineer

0개의 댓글