MongoDB 셸을 사용하여 문서 값 인쇄
- MongoDB 셸을 사용하여 문서 값 인쇄
- 컬렉션의 모든 문서에 대한 문서 값 인쇄
- 첫 번째 문서에 대해서만 문서 값 인쇄
- 사용자 정의 속성 이름이 있는 모든 문서의 문서 값 인쇄
- 모든 문서에 대해 지정된 조건에 따라 문서 값 인쇄
문서의 가치를 인쇄하는 것도 프로젝트의 요구 사항에 따라 혜택을 받을 수 있는 놀라운 기술입니다. 이 튜토리얼은 MongoDB 쉘을 사용하여 전체 문서를 인쇄하는 대신 문서 값을 인쇄합니다.
MongoDB 셸을 사용하여 문서 값 인쇄
Mongo 셸을 사용하여 문서를 인쇄하는 것은 매우 쉽지만 전체 문서를 가져오는 대신 값과 속성을 인쇄하는 방법은 무엇입니까? 자세히 알아보기 전에 아래와 같이 JSON 문서를 포함하는 teachers
라는 컬렉션을 만들어 보겠습니다.
컬렉션 만들기:
> db.createCollection('teachers')
JSON 문서를 teachers
컬렉션에 삽입합니다.
> db.teachers.insertMany(
[
{
"first_name": "Mehvish",
"last_name": "Ashiq",
"gender": "Female",
"grade": 18
},
{
"first_name": "Tahir",
"last_name": "Raza",
"gender": "Male",
"grade": 18
},
{
"first_name": "Saira",
"last_name": "Daniel",
"gender": "Female",
"grade": 20
}
]
)
teachers
컬렉션의 모든 문서 표시:
> db.teachers.find().pretty()
출력:
{
"_id" : ObjectId("6290440e7c524c650b7a51c0"),
"first_name" : "Mehvish",
"last_name" : "Ashiq",
"gender" : "Female",
"grade" : 18
}
{
"_id" : ObjectId("6290440e7c524c650b7a51c1"),
"first_name" : "Tahir",
"last_name" : "Raza",
"gender" : "Male",
"grade" : 18
}
{
"_id" : ObjectId("6290440e7c524c650b7a51c2"),
"first_name" : "Saira",
"last_name" : "Daniel",
"gender" : "Female",
"grade" : 20
}
컬렉션을 만들고 문서로 채우면 프로젝트 요구 사항에 따라 문서 값을 인쇄할 수 있습니다. 일부 시나리오는 다음과 같습니다.
- 컬렉션의 모든 문서에 대한 문서 값 인쇄
- 첫 번째 문서의 문서 값만 인쇄
- 사용자 정의 속성 이름이 있는 모든 문서에 대한 문서 값 인쇄
- 모든 문서에 대해 지정된 조건에 따라 문서 값을 인쇄합니다.
컬렉션의 모든 문서에 대한 문서 값 인쇄
예제 코드:
> db.teachers.find().forEach(
function (data) {
Object.keys(data).forEach(
function(key) {
print(key + ': ' + data[key])
}
)
print('\n')
}
)
출력:
_id: 6290440e7c524c650b7a51c0
first_name: Mehvish
last_name: Ashiq
gender: Female
grade: 18
_id: 6290440e7c524c650b7a51c1
first_name: Tahir
last_name: Raza
gender: Male
grade: 18
_id: 6290440e7c524c650b7a51c2
first_name: Saira
last_name: Daniel
gender: Female
grade: 20
이 예제 코드는 find()
메서드를 사용하여 모든 JSON 문서를 가져옵니다. 그런 다음 JavaScript의 forEach()
루프를 사용하여 각 문서를 반복하고 모든 문서를 data
로 익명 함수에 전달합니다.
이 함수에서 Object.keys(data)
를 사용하여 data
변수에 포함된 특정 문서의 모든 키(속성 또는 필드 이름이라고도 함)를 검색합니다.
또한 다른 forEach()
메서드를 사용하여 문서의 키(data
변수에 저장됨)를 반복하고 다른 익명 함수를 호출하여 해당 값으로 모든 키를 인쇄합니다.
첫 번째 문서에 대해서만 문서 값 인쇄
예제 코드:
> let result = db.getCollection('teachers').findOne()
> for (var key in result) {
if (result.hasOwnProperty(key)) {
print(key + ': ' + result[key]);
}
}
출력:
_id: 6290440e7c524c650b7a51c0
first_name: Mehvish
last_name: Ashiq
gender: Female
grade: 18
이 예제 스니펫의 경우 findOne()
메서드를 사용하여 지정된 컬렉션에서만 첫 번째 문서를 검색하고 이를 result
객체에 저장합니다.
다음으로, JavaScript의 for-in
루프를 사용하여 result
객체를 반복하고 key
를 반환하여 result[key]
로 값에 액세스합니다.
key
에 대한 값에 액세스하기 전에 hasOwnProperty()
메서드를 사용하여 객체(이 경우 result
)가 주어진 속성을 자체적으로 가지고 있는지 확인합니다.
사용자 정의 속성 이름이 있는 모든 문서의 문서 값 인쇄
예제 코드:
> db.teachers.find().forEach(
function (document) {
print("FirstName: " + document.first_name +"\n"+
"LastName: " + document.last_name + "\n"+
"Grade: " + document.grade)
print("\n\n")
}
)
출력:
FirstName: Mehvish
LastName: Ashiq
Grade: 18
FirstName: Tahir
LastName: Raza
Grade: 18
FirstName: Saira
LastName: Daniel
Grade: 20
때로는 프로그램에 지정된 대로 속성 이름을 가져오고 싶지 않지만 사용자 정의 속성 이름을 사용하고 싶을 때가 있습니다. 그렇다면 이 솔루션이 적합합니다.
find()
메소드를 사용하여 teachers
컬렉션의 모든 문서를 가져옵니다. 그런 다음 각 문서를 반복하여 키(필드 또는 속성 이름이라고도 함)를 사용하여 값을 검색합니다.
이 예에서 _id
라는 기본 키와 해당 값을 가져오지 못했다는 사실을 눈치채셨을 것입니다. print()
문에서 지정하지 않았지만 document
변수에는 여전히 있기 때문입니다.
다음 코드를 사용하여 확인하십시오.
예제 코드:
db.teachers.find().forEach(
function (document) {
print(document._id)
print("\n\n")
}
)
출력:
ObjectId("6290440e7c524c650b7a51c0")
ObjectId("6290440e7c524c650b7a51c1")
ObjectId("6290440e7c524c650b7a51c2")
Mongo 셸에서 이를 피하기 위해 다음 섹션을 살펴보겠습니다.
모든 문서에 대해 지정된 조건에 따라 문서 값 인쇄
예제 코드:
> db.teachers.find({}, {"grade": 1, "_id":0}).forEach(
function(property) {
print(property.grade)
})
출력:
18
18
20
여기에서 예제 코드를 이해하기 위해서는 먼저 find()
함수를 이해해야 합니다. 요구 사항을 충족하기 위해 다양한 방법으로 find()
메서드를 사용할 수 있습니다. 일부 형식은 다음과 같습니다.
find()
또는find({})
를 사용하여 지정된 컬렉션에서 모든 문서 가져오기find({}, {"city": 1})
를 사용하여 모든 문서에 대한 값과 함께city
속성을 검색합니다.find({}, {"city": 1, "_id:0"})
를 사용하여city
속성과 모든 문서의 값을 가져오지만ObjectId
는 표시하지 않습니다. 여기에서_id
의 값을0
(기본적으로1
임)으로 설정하면ObjectId
를 인쇄할 수 없습니다.
마찬가지로 find()
메서드를 사용하여 _id
필드를 표시하지 않고 grade
속성과 해당 값을 검색합니다.
그러나 모든 레코드에 대해 forEach()
루프를 사용하여 익명 함수에 전달된 속성 값만 인쇄합니다. JavaScript의 화살표 기능을 사용하여 코드를 최적화할 수 있습니다.
예제 코드:
db.teachers.find({}, {"grade": 1, "_id":0}).forEach( property => print(property.grade))
출력:
18
18
20