1

我正在使用如下设计的集合:

> db.myCollection.find().pretty();
{
        "_id" : ObjectId("524ecedecb5603a47a2cc011"),
        "clientId" : ObjectId("524d720d8d3ea014a52e95bb"),
        "hostname" : "paypal.com",
        "inspections" : [
                {
                        "chainId" : ObjectId("524edb0dcb5666fba519c9f8"),
                        "isValid" : true,
                        "date" : ISODate("2013-10-04T15:13:17.634Z")
                },
                {
                        "chainId" : ObjectId("524edb0dcb5666fba519c9f8"),
                        "isValid" : true,
                        "date" : ISODate("2013-10-04T15:15:56.173Z")
                }
        ],
        "name" : "Paypal",
        "port" : 443
}
{
        "_id" : ObjectId("524edaeecb5624f06c0f2687"),
        "clientId" : ObjectId("524d720d8d3ea014a52e95bb"),
        "hostname" : "google.com",
        "inspections" : [
                {
                        "chainId" : ObjectId("524edb0dcb5666fba519c9f9"),
                        "isValid" : true,
                        "date" : ISODate("2012-09-02T14:27:18.674Z")
                },
                {
                        "chainId" : ObjectId("524edb0dcb5666fba519c9f9"),
                        "isValid" : true,
                        "date" : ISODate("2013-10-04T15:15:56.175Z")
                }
        ],
        "name" : "Google",
        "port" : 443
}

对于给定的 clientId,我想检索我收藏的每个条目,但只有inspections最新的date.

为此,我正在使用此聚合:

db.modules.certificateInspector.sslServices.aggregate(
    {$match: {
        "clientId": ObjectId("524d720d8d3ea014a52e95bb")
    }},
    {$unwind: "$inspections"},
    {$sort: {"inspections.date": -1}},
    {$group: {
        "_id": "$_id",
        "name": {
            "$first": "$name"
        },
        "inspections": {
            "$first": "$inspections"
        }
    }}
);

有效。

我唯一的问题是:我们能做得更好(在性能方面)吗?
我不知道,我觉得 $sort 的东西很重。

谢谢!

4

0 回答 0