MongoDB - 仅检索每个文档的最新子文档

时间:2013-10-04 15:23:12

标签: mongodb

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

> 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"
        }
    }}
);

可行

我唯一的问题是:我们能做得更好(表现)吗? 我不知道,我觉得,那种美元的东西很重。

谢谢!

0 个答案:

没有答案