배열 길이별 Mongo 순서
다음과 같은 mongo 문서가 있다고 가정해 보겠습니다.
질문 1
{
answers:[
{content: 'answer1'},
{content: '2nd answer'}
]
}
질문 2
{
answers:[
{content: 'answer1'},
{content: '2nd answer'}
{content: 'The third answer'}
]
}
답변 크기별로 컬렉션을 주문할 수 있는 방법이 있습니까?
약간의 조사 후 다른 분야를 추가하자는 제안을 보았습니다. 여기에는 많은 답변이 포함되어 있고 참조용으로 사용할 수 있지만 기본적인 방법이 있을 수도 있습니다.
저는 당신이 사용할 수 있을 거라고 생각했습니다.$size하지만 그것은 특정 크기의 배열을 찾는 것일 뿐이지 주문하는 것은 아닙니다.
mongo 설명서에서: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size
$size를 사용하여 크기 범위(예: 요소가 하나 이상인 배열)를 찾을 수 없습니다.범위를 쿼리해야 하는 경우 요소를 추가할 때 증분하는 추가 크기 필드를 만듭니다.다른 쿼리 식이 포함된 경우 쿼리 식의 해당 부분에서 일치하는 항목을 검색하는 데 사용될 수 있지만 쿼리의 $size 부분에는 인덱스를 사용할 수 없습니다.
아직 출시되지 않은 새로운 집계 프레임워크인 편집을 통해 이 작업을 상당히 쉽게 수행할 수 있을 것으로 보입니다.http://www.mongodb.org/display/DOCS/Aggregation+Framework
이제 업데이트 집계 프레임워크가 종료되었습니다...
> db.test.aggregate([
{$unwind: "$answers"},
{$group: {_id:"$_id", answers: {$push:"$answers"}, size: {$sum:1}}},
{$sort:{size:1}}]);
{
"result" : [
{
"_id" : ObjectId("5053b4547d820880c3469365"),
"answers" : [
{
"content" : "answer1"
},
{
"content" : "2nd answer"
}
],
"size" : 2
},
{
"_id" : ObjectId("5053b46d7d820880c3469366"),
"answers" : [
{
"content" : "answer1"
},
{
"content" : "2nd answer"
},
{
"content" : "The third answer"
}
],
"size" : 3
}
],
"ok" : 1
}
사용합니다$project이 경우:
db.test.aggregate([
{
$project : { answers_count: {$size: { "$ifNull": [ "$answers", [] ] } } }
},
{
$sort: {"answers_count":1}
}
])
또한 빈 답변이 있는 문서를 포함할 수 있습니다.그러나 다음과 같은 단점도 있습니다. 필요한 모든 필드를 수동으로 추가해야 합니다.$project걸음.
mongodb 집계 단계를 사용할 수 있습니다.$addFields저장 개수에 추가 필드를 추가한 다음$sort단계.
db.test.aggregate([
{
$addFields: { answers_count: {$size: { "$ifNull": [ "$answers", [] ] } } }
},
{
$sort: {"answers_count":1}
}
])
$size 특성을 사용하여 배열 길이별로 정렬할 수 있습니다.
db.getCollection('test').aggregate([
{$project: { "answers": 1, "answer_count": { $size: "$answers" } }},
{$sort: {"answer_count": -1}}])
언급URL : https://stackoverflow.com/questions/9040161/mongo-order-by-length-of-array
'source' 카테고리의 다른 글
| 열 값을 기준으로 한 테이블에서 다른 테이블로 데이터를 가져오는 방법 (0) | 2023.07.19 |
|---|---|
| 그림에서 표시된 각 선에 대해 새 색상을 선택하는 방법 (0) | 2023.07.19 |
| SQL에서 단일 따옴표와 이중 따옴표의 차이점은 무엇입니까? (0) | 2023.05.20 |
| Mac에서 Python 업데이트 중 (0) | 2023.05.20 |
| Xcode 4에서 "기존 프레임워크를 추가"하려면 어떻게 해야 합니까? (0) | 2023.05.20 |