Я искал похожие вопросы, но не нашел. Не стесняйтесь указывать мне в их направлении.
Скажем, у меня есть эти данные:
{ "_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
, чтобы в каждой группе оставалась только последняя запись, и вот как я могу этого добиться. НО мне нужен способ избежать именования всех полей, которые я хочу получить в результате (в этом примере «имя»), потому что в моем реальном варианте использования они заранее не известны.
Итак, есть ли способ добиться этого, но без необходимости явно указывать каждое поле с помощью $last
и просто использовать вместо этого все поля? Конечно, я бы отсортировал свои данные перед группировкой, и мне просто нужно как-то сказать Монго «взять все значения из последнего».