如何返回一组明确的日期订购文件?

时间:2015-02-25 15:22:54

标签: arrays mongodb mongodb-query

在mongodb中,我有一个locations集合,其中包含有关某人所在位置的数据。

我有一个operatorID字段,一个location对象和一个updatedAt ISODate字段。

e.g。

{"_id" : ObjectId("..."), "location" : [object Object], "operatorID" : "T800", "updatedAt"  : ISODate("2015-01-08T10:54:32.389Z") }
{"_id" : ObjectId("..."), "location" : [object Object], "operatorID" : "T800", "updatedAt"  : ISODate("2015-01-08T11:00:15.304Z") }
{"_id" : ObjectId("..."), "location" : [object Object], "operatorID" : "T1000", "updatedAt" : ISODate("2015-01-09T14:50:32.129Z") }
{"_id" : ObjectId("..."), "location" : [object Object], "operatorID" : "T1000", "updatedAt" : ISODate("2015-01-10T13:10:15.204Z") }
{"_id" : ObjectId("..."), "location" : [object Object], "operatorID" : "T100", "updatedAt"  : ISODate("2015-01-25T14:50:32.129Z") }
{"_id" : ObjectId("..."), "location" : [object Object], "operatorID" : "T100", "updatedAt"  : ISODate("2015-01-24T13:10:15.204Z") }

给定一系列名称,如何返回按updatedAt:1排序的最新唯一运算符ID数组?

例如:给定{ operatorID: { $in: ["T1000", T800"] } }

{"_id" : ObjectId("222"), "location" : [object Object], "operatorID" : "T800", "updatedAt"  : ISODate("2015-01-08T11:00:15.304Z") }
{"_id" : ObjectId("333"), "location" : [object Object], "operatorID" : "T1000", "updatedAt" : ISODate("2015-01-09T14:50:32.129Z") }

我一直在shell中尝试这一点,这让我大部分都在那里,但我基本上只需要返回每组operatorID中的最后一个对象:

db.locations.find( { $query: {'operatorID': { $in: ["T1000", "T800"] } }, $orderby: { operatorID:1, updatedAt:1 } } )

db.locations.find( { operatorID: { $in: ["T1000", "T800"] }  } ).sort( { operatorID:1, updatedAt:1 } )

两者都返回所有T1000和T800,按名称和日期分类在各自的组中。

谢谢!

1 个答案:

答案 0 :(得分:1)

在小方面集合中跟踪这些信息可能是一个好主意,但是对于您当前的集合,您可以使用聚合:

db.locations.aggregate([
    { "$sort" : { "updatedAt" : -1 } },
    { "$group" : { "_id" : "$operatorID", "updatedAt" : { "$first" : "$updatedAt" } } }
])