MongoDb Aggregate для каждого субдокумента

У меня есть эти коллекции, статистика и предметы. В статистике есть один поддокумент:

var ItemSchema = new Schema({ 
    type: String,
    created_at: Date,
    updated_at: {
        type: Date,
        default: Date.now()
    }
});

var StatsSchema = new Schema({ 
    item: {
        type: Schema.ObjectId,
        ref: 'Item'
    },
    url: String,
    date: Date,
    action: String,
    hourly: Number
});

Я хотел бы объединить статистику с группировкой по типу элемента. Является ли это возможным?

Я пробовал что-то вроде этого, но безуспешно:

db.stats.aggregate(
    { $project: { _id: 1, hourly: 1, action: 1, item: 1, type: '$item.type' } }, 
    { $group: { _id: { action: '$action', type: '$item.type' }, total: { $sum: '$hourly' } } }
)

person michelem    schedule 02.02.2015    source источник
comment
У вас есть указанная схема с информацией, хранящейся в отдельных коллекциях. MongoDB не объединяет данные из коллекций с помощью подобных операций. Если вам нужен этот тип действий, лучше вместо этого встраивать данные.   -  person Neil Lunn    schedule 03.03.2015


Ответы (1)


Вам не понадобится $project часть конвейера. Вы должны получить то, что вам нужно, на $group этапе

db.stats.aggregate({ $group: { _id: "$item.type" , total: { $sum: '$hourly' } } });
person Kevin Brady    schedule 02.02.2015
comment
Пытался, но не получил. - person michelem; 03.02.2015
comment
Можете ли вы добавить более подробную информацию о том, какую ошибку вы получаете или какие шаги вы предпринимаете для устранения неполадок? что происходит, когда вы пытаетесь выполнить приведенный выше запрос агрегирования? Можете ли вы добавить образец данных к вашему первоначальному запросу? - person Kevin Brady; 03.02.2015
comment
Работает, ошибок нет, но _id имеет значение null с _id: $ item.type - person michelem; 03.02.2015
comment
Можете ли вы предоставить образцы данных в сборе статистики? (добавьте к первому вопросу) - person Kevin Brady; 03.02.2015