我搜索了类似的问题,却找不到任何问题。请随意指出我的方向。
说我有这些数据:
{ "_id" : ObjectId("5694c9eed4c65e923780f28e"), "name" : "foo1", "attr" : "foo" }
{ "_id" : ObjectId("5694ca3ad4c65e923780f290"), "name" : "foo2", "attr" : "foo" }
{ "_id" : ObjectId("5694ca47d4c65e923780f294"), "name" : "bar1", "attr" : "bar" }
{ "_id" : ObjectId("5694ca53d4c65e923780f296"), "name" : "bar2", "attr" : "bar" }
如果我想获取每个属性组的最新记录,我可以这样做:
> db.content.aggregate({$group: {_id: '$attr', name: {$last: '$name'}}})
{ "_id" : "bar", "name" : "bar2" }
{ "_id" : "foo", "name" : "foo2" }
我希望我的数据按attr
分组,然后按_id
排序,以便每组中只保留最新记录,这就是我如何实现这一目标。但我需要一种方法来避免在结果中命名我想要的所有字段(在本例中为“name”),因为在我的实际用例中,它们是未知的。
那么,有没有办法实现这一点,但无需使用$last
明确命名每个字段,而只是取代所有字段?当然,我会在分组之前对数据进行排序,我只需要以某种方式告诉Mongo“从最新值中获取所有值”。