반응형
MongoDB 결과 쿼리를 평준화할 수 있습니까?
MongoDB 컬렉션에 깊이 중첩된 컬렉션이 있습니다.
다음 쿼리를 실행할 때:
db.countries.findOne({},{'data.country.neighbor.name':1,'_id':0})
다음과 같은 중첩된 결과가 나옵니다.
{"data" : {
"country" : [
{
"neighbor" : [
{
"name" : "Austria"
},
{
"name" : "Switzerland"
}
]
},
{
"neighbor" : {
"name" : "Malaysia"
}
},
{
"neighbor" : [
{
"name" : "Costa Rica"
},
{
"name" : "Colombia"
}
]
}
]
}}
자, 이것이 제가 원하는 것입니다.
['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']
또는 다음과 같습니다.
{'name':['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']}
아니면 다른 비슷한 것들도...이것이 가능합니까?
사용할 수 있습니다.$project
&$unwind
&$group
결과를 요구사항에 더 가깝게 하기 위한 집계 프레임워크.
> db.countries.aggregate({$project:{a:'$data.country.neighbor.name'}},
{$unwind:'$a'},
{$unwind:'$a'},
{$group:{_id:'a',res:{$addToSet:'$a'}}})
{
"result" : [
{
"_id" : "a",
"res" : [
"Colombia",
"Malaysia",
"Switzerland",
"Costa Rica",
"Austria"
]
}
],
"ok" : 1
}
$unwind
이름 배열이 중첩되어 있기 때문에 두 번 사용됩니다.그리고 그것은 오직 다음과 같은 경우에만 작동할 것입니다.neighbor
특성이 배열입니다.이 예에서는 하나의 인접 필드(말레이시아)가 배열이 아닙니다.
훨씬 더 간단한 방법으로 수행했습니다. 아마도 최근일 것입니다.
db.countries.aggregate({$unwind:'$data.country.neighbor.name'})
데이터를 평탄화하기 위해 사용할 수도 있습니다.$reduce
여기 문서의 예가 있습니다.
db.countries.aggregate([
{
$addFields: {
newField: {
$reduce: {
input: "$data.country.neighbor.name",
initialValue: [],
in: { $concatArrays: ["$$value", "$$this"] }
}
}
}
}
])
새로운 통합 프레임워크에서는 매우 간단합니다.$project와 $unwind 작업이 목적에 맞습니다.
언급URL : https://stackoverflow.com/questions/13281733/is-it-possible-to-flatten-mongodb-result-query
반응형
'programing' 카테고리의 다른 글
Ruby: 인스턴스의 호출 클래스 메서드 (0) | 2023.06.04 |
---|---|
Excel VBA: range.copy 후 행진 개미를 프로그래밍 방식으로 제거하는 방법. (0) | 2023.05.25 |
문자열의 마지막 5자 가져오기 (0) | 2023.05.25 |
xlwings와 openpyxl Reading Excel 워크북의 차이점 (0) | 2023.05.25 |
Swift의 닙에서 UIV뷰 로드 (0) | 2023.05.25 |