У меня есть список статей, и каждый из них имеет свойство массива в котором перечислены различные лица, упомянутые в них:MongoDB группа по массивов внутренних элементов-
_id: {
$oid: "52b632a9e4f2ba13c82ccd23"
},
providerName: "The Guardian",
url: "http://feeds.theguardian.com/c/34708/f/663860/s/3516cebc/sc/38/l/0L0Stheguardian0N0Cmusic0C20A130Cdec0C220Cwaterboys0Efishermans0Eblues0Etour0Ehammersmith/story01.htm",
subject: "The Waterboys – review",
class_artist: [
"paul mccartney"
]
Я пытался (безуспешно) чтобы получить список всех отдельных художников (class_artist
), в зависимости от количества статей, в которые они были помечены за последние 7 дней.
я получил, насколько:
var date = new Date();
date.setDate(date.getDate() - 7);
db.articles.group({
key: { class_artist: 1 },
cond: { class_date: { $gt: date } },
reduce: function (curr, result) { result.cnt++; },
initial: { cnt : 0 }
}).sort({cnt: -1});
Но, к сожалению, она не будет считать их на основе индивидуальных значений массива, но композиции массива (то есть, списки художников).
Я пробовал использовать функцию $unwind
, но не смог заставить ее работать.
Спасибо за быстрый ответ! Работает как шарм. –
FYI, формат «weird wrapper» - это команда '' group() '(http://docs.mongodb.org/manual/reference/command/group/), которая реализована в JavaScript и предшествует структуре агрегации. См. Также: [Сравнение агрегации MongoDB: group(), $ group и MapReduce] (http://stackoverflow.com/questions/12337319). – Stennie
По какой-то причине совокупный метод всегда казался запутанным, но ответ действительно дал мне этот момент «лампочка» ... отличная работа =) – afreeland