programing

집계 addToSet 결과 정렬 중

minimums 2023. 7. 12. 23:39
반응형

집계 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

반응형