在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,按名称和日期分类在各自的组中。
谢谢!
答案 0 :(得分:1)
在小方面集合中跟踪这些信息可能是一个好主意,但是对于您当前的集合,您可以使用聚合:
db.locations.aggregate([
{ "$sort" : { "updatedAt" : -1 } },
{ "$group" : { "_id" : "$operatorID", "updatedAt" : { "$first" : "$updatedAt" } } }
])