Операторы агрегации даты Mongo с ObjectId

Я пытаюсь использовать ObjectId в качестве держателя даты создания и сталкиваюсь с некоторыми проблемами при выполнении запросов на агрегирование. В частности, мы хотим использовать операторы агрегирования даты для группировки документов по месяцам, но этот оператор явно не работает с ObjectId. Есть ли способ обойти это, или мне придется начать использовать отдельное поле CreationTime для каждого документа?

Вот запрос, который я пытался -

db.People.aggregate([
{
    $match: {
        $or: [{"Name":"Random1"}, {"Name":"Random2"}]
    }
},
{
    $project: {
        Name: "$Name",
        Year: {$year: "$_id"},
        Month: {$month: "$_id"}
    }
},
{
    $group: {
        _id: {Name: "$Name", Year: "$Year", Month: "$Month"},
        TotalRequests: {$sum:1}
    }
}

])


person camelCaseWarrior    schedule 18.07.2013    source источник
comment
Если _id имеет тип ObjectId, он не может работать, потому что это не дата. Это хэш даты. Насколько мне известно, обратная операция невозможна.   -  person innoSPG    schedule 19.07.2013
comment
На самом деле ObjectID имеет метод getTimestamp () , но его нельзя использовать на AF. Вы должны проголосовать за эту проблему JIRA, если вам действительно нужна эта функция.   -  person Miguel Cartagena    schedule 19.07.2013


Ответы (1)


Прямо сейчас вам нужно сохранить отдельное поле, поскольку Aggregation Framework еще не может с этим справиться. Билет сервера есть на https://jira.mongodb.org/browse/SERVER-9406 чтобы реализовать его, поэтому я предлагаю вам проголосовать за него (я только что сделал).

person Derick    schedule 19.07.2013