MongoDB에서 검색/프로젝션을 수행할 때 필드 이름을 변경하려면 어떻게 해야 합니까?
찾기 쿼리에서 반환된 필드의 이름을 바꿀 수 있습니까?다음과 같은 것을 사용하고 싶습니다.$rename
하지만 접근 중인 문서를 변경하고 싶지 않습니다.나는 단지 그것들을 다르게 되찾고 싶다, 마치 작동하는 것처럼.SELECT COORINATES AS COORDS
SQL에서.
내가 지금 하는 일
db.tweets.findOne({}, {'level1.level2.coordinates': 1, _id:0})
{'level1': {'level2': {'coordinates': [10, 20]}}}
반품하고 싶은 것은 다음과 같습니다.{'coords': [10, 20]}
따라서 기본적으로 다음 대신 사용합니다.
db.tweets.aggregate([
{ "$project": {
"_id": 0,
"coords": "$level1.level2.coordinates"
}}
])
그리고 그것은 여러분이 원하는 결과를 줍니다.
MongoDB 2.6 이상 버전은 find와 마찬가지로 "커서"를 반환합니다.
자세한 내용은 및 기타 집계 프레임워크 연산자를 참조하십시오.
대부분의 경우 필드 이름을 반환된 대로 변경해야 합니다..find()
커서를 처리할 때 사용합니다.예를 들어 JavaScript의 경우 를 사용하여 이 작업을 수행할 수 있습니다.
셸에서:
db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc => {
doc.coords = doc['level1']['level2'].coordinates;
delete doc['level1'];
return doc;
})
인라인 또는 그 이상:
db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc =>
({ coords: doc['level1']['level2'].coordinates })
)
이렇게 하면 서버의 추가 오버헤드를 방지할 수 있으며, 추가 처리 오버헤드가 검색된 데이터 크기의 실제 감소 효과를 초과하는 경우에 사용해야 합니다.이 경우(그리고 대부분)는 최소이므로 재구성하기 위해 커서 결과를 다시 처리하는 것이 좋습니다.
@NeilLunn이 언급한 바와 같이 Aggregation 파이프라인을 사용하면 다음과 같은 이점을 얻을 수 있습니다.
그리고 시작Mongo 4.2
집계 연산자를 사용하여 문서를 하위 연산자로 대체할 수 있습니다.
// { level1: { level2: { coordinates: [10, 20] }, b: 4 }, a: 3 }
db.collection.aggregate(
{ $replaceWith: { coords: "$level1.level2.coordinates" } }
)
// { "coords" : [ 10, 20 ] }
당신이 언급한 이후로findOne
또한 다음과 같이 결과 문서 수를 1로 제한할 수 있습니다.
db.collection.aggregate([
{ $replaceWith: { coords: "$level1.level2.coordinates" } },
{ $limit: 1 }
])
에 앞서Mongo 4.2
그리고 시작Mongo 3.4
대신$replaceRoot
사용할 수 있습니다.$replaceWith
:
db.collection.aggregate(
{ $replaceRoot: { newRoot: { coords: "$level1.level2.coordinates" } } }
)
일반적으로 $project stage는 필드 이름을 사용하고 출력에 필드를 포함하도록 1 또는 0/true 또는 false를 지정하며 필드 이름을 true 또는 false 대신 필드에 대한 값을 지정하여 필드 이름을 변경할 수도 있습니다.다음은 구문입니다.
db.test_collection.aggregate([
{$group: {
_id: '$field_to_group',
totalCount: {$sum: 1}
}},
{$project: {
_id: false,
renamed_field: '$_id', // here assigning a value instead of 0 or 1 / true or false effectively renames the field.
totalCount: true
}}
])
단계(>= 4.2)
- $addFields: {"새로 만들기": "$Old"}
- $unset: {"$Old": 1}
언급URL : https://stackoverflow.com/questions/23784370/how-do-i-rename-fields-when-performing-search-projection-in-mongodb
'source' 카테고리의 다른 글
WPF의 숫자 데이터 입력 (0) | 2023.05.15 |
---|---|
Xcode 9의 "이 함수 선언은 프로토타입이 아닙니다" 경고 (0) | 2023.05.15 |
특정 열의 날짜 형식을 "yyyy-mm-dd"로 설정하는 VBA 코드 (0) | 2023.05.15 |
SQL Server - SQL 스크립트 실행 중지 또는 중단 (0) | 2023.05.15 |
ASP.net/C # 앱 구성 파일 값에 앰퍼샌드를 추가하려면 어떻게 해야 합니까? (0) | 2023.05.15 |