簡體   English   中英

如何對內部數組元素進行排序,同時保持對外部文檔的不同排序?

[英]How to sort inner array elements while maintaining different sorting for outer documents?

我有一組文檔,每個文檔都有一個嵌入式數組。 我需要每個數組的元素在它們內部進行排序,而包含的文檔應保持原樣。

作為一個示例,從類似的排序問題中獲取數據:

[
    {
        name: 'item1',
        slots: [
            { date : ISODate("2013-01-18T23:00:00Z") },
            { date : ISODate("2013-02-05T23:00:00Z") },
            { date : ISODate("2013-03-24T23:00:00Z") },
        ]
    },
    {
        name: 'item2',
        slots: [
            { date : ISODate("2013-01-12T23:00:00Z") },
            { date : ISODate("2013-01-03T23:00:00Z") },
            { date : ISODate("2013-03-04T23:00:00Z") },
        ]
    },
    {
        name: 'item3',
        slots: [
            { date : ISODate("2013-03-14T23:00:00Z") },
            { date : ISODate("2013-02-18T23:00:00Z") },
            { date : ISODate("2013-03-07T23:00:00Z") },
        ]
    }
]

我的預期結果略有不同:

[
    {
        name: 'item3',
        slots: [
            { date : ISODate("2013-02-18T23:00:00Z") },
            { date : ISODate("2013-03-07T23:00:00Z") },
            { date : ISODate("2013-03-14T23:00:00Z") },
        ]
    },
    {
        name: 'item2',
        slots: [
            { date : ISODate("2013-01-03T23:00:00Z") },
            { date : ISODate("2013-01-12T23:00:00Z") },
            { date : ISODate("2013-03-04T23:00:00Z") },
        ]
    },
    {
        name: 'item1',
        slots: [
            { date : ISODate("2013-01-18T23:00:00Z") },
            { date : ISODate("2013-02-05T23:00:00Z") },
            { date : ISODate("2013-03-24T23:00:00Z") },
        ]
    }
]

如何在MongoDB 3.6中實現呢? 如果可能的話,我想使用聚合管道。

到目前為止,我還沒有做太多嘗試,因為我認為唯一適合該步驟的階段是$sort ,但是正如文檔中所述 ,它將對外部集合進行排序。

您可以使用以下聚合查詢。

$unwind the slots數組,然后將文檔日期asc和$group重新排序到_id以獲取排序后的數組。

$sort desc name上的$sort對文檔進行排序。

db.col.aggregate([
  {"$unwind":"$slots"},
  {"$sort":{"slots.date":1}},
  {"$group":{"_id":"$_id","name":{"$first":"$name"},"slots":{"$push":"$slots"}}},
  {"$sort":{"name":-1}},
])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM