簡體   English   中英

如何對存儲在對象中的數組內的對象進行排序

[英]How to sort objects inside an array which is stored in an object

我創建了一個名為“對話”的集合,其文檔之一如下。

{
    "_id" : ObjectId("5535fb3172163e5f1561daa7"),
    "messages" : [
        {
            "from" : ObjectId("5534b2992a104ed914435c31"),
            "_id" : ObjectId("5535fb3172163e5f1561daa8"),
            "created" : ISODate("2015-04-21T07:24:33.495Z"),
            "read" : false,
            "message" : "second first  message",
            "participants" : [
                ObjectId("5534b2992a104ed914435c31"),
                ObjectId("5530af38576214dd3553331c")
            ]
        },
        {
            "from" : ObjectId("5534b2992a104ed914435c31"),
            "_id" : ObjectId("5535fb6472163e5f1561daa9"),
            "created" : ISODate("2015-04-21T07:25:24.349Z"),
            "read" : false,
            "message" : "second second  message",
            "participants" : [
                ObjectId("5534b2992a104ed914435c31"),
                ObjectId("5530af38576214dd3553331c")
            ]
        },
        {
            "from" : ObjectId("5534b2992a104ed914435c31"),
            "_id" : ObjectId("5535fb8272163e5f1561daaa"),
            "created" : ISODate("2015-04-21T07:25:54.190Z"),
            "read" : false,
            "message" : "second third  message",
            "participants" : [
                ObjectId("5534b2992a104ed914435c31"),
                ObjectId("5530af38576214dd3553331c")
            ]
        }
    ],
    "participants" : [
        ObjectId("5534b2992a104ed914435c31"),
        ObjectId("5530af38576214dd3553331c")
    ],
    "__v" : 2
}

現在,我必須根據對象的'created'屬性對messages數組內的對象進行排序。 我使用了以下代碼。

1.     db.conversations.aggregate({$sort: {'messages.message' : -1}}).pretty()
2.     db.conversations.find({_id :ObjectId('5536023d33e52be617b8bb27')}).sort({"messages.created":1}).pretty()

但是這些都不給我正確的結果。 請幫助我獲得想要的結果。 謝謝

您可以使用Mongodb Aggregation框架

db.conversations.aggregate([{
    '$match':{
        '_id' :ObjectId("5536023d33e52be617b8bb27")}
    },
    {'$unwind': '$messages'},
    {'$sort': { 'messages.created' : -1 }}
])

結果:-

{
    result:[
        {
            '_id' :ObjectId("5536023d33e52be617b8bb27"),
            'messages' :{
                "from" : ObjectId("5534b2992a104ed914435c31"),
                "_id" : ObjectId("5535fb8272163e5f1561daaa"),
                "created" : ISODate("2015-04-21T07:25:54.190Z"),
                "read" : false,
                "message" : "second third  message",
                "participants" : [
                    ObjectId("5534b2992a104ed914435c31"),
                    ObjectId("5530af38576214dd3553331c")
                ]
            },
            "participants" : [
                    ObjectId("5534b2992a104ed914435c31"),
                    ObjectId("5530af38576214dd3553331c")
            ],
            "__v" : 2
        }

        {
            '_id' :ObjectId("5536023d33e52be617b8bb27"),
            'messages' :{
                "from" : ObjectId("5534b2992a104ed914435c31"),
                "_id" : ObjectId("5535fb6472163e5f1561daa9"),
                "created" : ISODate("2015-04-21T07:25:24.349Z"),
                "read" : false,
                "message" : "second second  message",
                "participants" : [
                    ObjectId("5534b2992a104ed914435c31"),
                    ObjectId("5530af38576214dd3553331c")
                ]
            },
            "participants" : [
                    ObjectId("5534b2992a104ed914435c31"),
                    ObjectId("5530af38576214dd3553331c")
            ],
            "__v" : 2
        },
        {
            '_id' :ObjectId("5536023d33e52be617b8bb27"),
            'messages' :{
                "from" : ObjectId("5534b2992a104ed914435c31"),
                "_id" : ObjectId("5535fb3172163e5f1561daa8"),
                "created" : ISODate("2015-04-21T07:24:33.495Z"),
                "read" : false,
                "message" : "second first  message",
                "participants" : [
                    ObjectId("5534b2992a104ed914435c31"),
                    ObjectId("5530af38576214dd3553331c")
                ]
            },
            "participants" : [
                    ObjectId("5534b2992a104ed914435c31"),
                    ObjectId("5530af38576214dd3553331c")
            ],
            "__v" : 2
        },
    ]
}

暫無
暫無

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

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