我正在使用如下设计的集合:
> 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"
}
}}
);
可行。
我唯一的问题是:我们能做得更好(表现)吗? 我不知道,我觉得,那种美元的东西很重。
谢谢!