반응형
집계 addToSet 결과 정렬 중
$addToSet을 정렬된 배열로 결과를 얻을 수 있는 방법이 있습니까?
파이프라인을 확장하고 배열을 $wind하고 정렬하고 다시 그룹화하려고 했지만 결과가 정렬되지 않았습니다.
어레이가 상당히 크기 때문에 애플리케이션에서 정렬하는 것을 피하려고 합니다.
문서 예제: {"_id" : ObjectId("52a84825cc8391ab188b4567"),"id" : 129624"메시지" : "샘플","날짜" : "12-09-2013, 17:34:34","dt" : ISODate("2013-12-09T17:34:34.000Z"), }
쿼리:
db.uEvents.aggregate([{$match : {dt : {$gte : 새 날짜(2014,01,01), $lt : 새 날짜(2015,01,17)}}},{$filename : {dt : 1}}{$group}: {_id : {ID: "$id"연도: {'$year' : "$dt"}월: {'$month' : "$dt"}day : {'$dayOfMonth' : "$dt"}},dt : {$addToSet : "$dt"} }}] );
네, 가능하지만 다르게 접근하세요.저는 이것을 위한 저만의 데이터를 제공할 뿐이지만, 여러분은 개념을 이해할 수 있을 것입니다.
내 샘플:
{ "array" : [ 2, 4, 3, 5, 2, 6, 8, 1, 2, 1, 3, 5, 9, 5 ] }
저는 이것에 대해 CTO를 "준 견적"하고 세트가 주문되지 않은 것으로 간주된다고 진술할 것입니다.
실제 JIRA, 구글 그룹의 성명서가 있습니다. 이와 유사한 내용입니다.그럼 "엘리엇"에서 따온 것으로, 이것이 사실이 될 것이라는 것을 받아들이자.
그래서 주문한 결과를 원한다면 이런 단계로 그런 식으로 마사지를 해야 합니다.
db.collection.aggregate([
// Initial unwind
{"$unwind": "$array"},
// Do your $addToSet part
{"$group": {"_id": null, "array": {"$addToSet": "$array" }}},
// Unwind it again
{"$unwind": "$array"},
// Sort how you want to
{"$sort": { "array": 1} },
// Use $push for a regular array
{"$group": { "_id": null, "array": {"$push": "$array" }}}
])
그리고 나서 뭐든 해요.하지만 이제 배열이 정렬되었습니다.
mongoDB 버전 5.2 이후로 당신은 그것을 할 수 있습니다.$unwind
:
그$setIntersection
어레이에서 세트를 생성합니다.$sortArray
정렬:
db.collection.aggregate([
{$set: {array: {$setIntersection: ["$array"]}}},
{$set: {$sortArray: {input: "$array", sortBy: 1}}}
])
언급URL : https://stackoverflow.com/questions/21967233/sorting-aggregation-addtoset-result
반응형
'programing' 카테고리의 다른 글
목록 요소가 있는지 테스트하는 방법은 무엇입니까? (0) | 2023.07.12 |
---|---|
동면.최대 절전 모드 버전을 4.2.0으로 업그레이드하면 INTEGER를 사용할 수 없습니다.CR1 (0) | 2023.07.12 |
Contains()를 사용할 때 2100 매개 변수 제한(SQL Server)을 초과하는 경우 (0) | 2023.07.12 |
페르시아 문자만 허용하는 정규식 (0) | 2023.07.12 |
SQL 쿼리 동등성 입증 (0) | 2023.07.12 |