Ich versuche, eine Summe von Inhalten zu erhalten, die ein Benutzer gemocht, geteilt oder kommentiert hat.MongoDb aggregiert die Anzahl/Summe von 3 Feldern
Mein Inhaltsmodell hat die folgende Struktur.
Content = {
_id: ObjectId(),
author: ObjectId(),
value: <string of post content>
tags: [<trings>],
likes: [array of user ids],
shares: [array of user ids],
comments: [{
ContentId(of the same schema),
User Id
}]
}
Nun id mag die Inhaltsdokumente aggregieren über, und ein Ergebnis wie dieses.
{
likes: 20,
shares: 10,
comments: 5
}
Also, kurz gesagt, wann immer es einen Inhalt, wo Benutzer-ID in Gleichen Array ist, wird Gleichen von 1.
Das Gleiche gilt für Aktien und Kommentare erhöht.
Ich bin nicht sicher, ob dies mit Aggregation Framework möglich ist. Ich denke nicht, aber vielleicht einige mongodb Gurus besser wissen
Quick Edit. Teilweise basierend auf dem ersten Post habe ich das gemacht. :)
db.getCollection('contents').aggregate([
{$facet: {
"likes": [
{$match: {likes: ObjectId("596537d6b63edc2318ee9f0c")} },
{$group: {
_id : "$likes",
count: { $sum: 1 }
}},
{ $project: { count: 1} }
],
"shares": [
{$match: {shares: ObjectId("596537d6b63edc2318ee9f0c")} },
{$group: {
_id : "$shares",
count: { $sum: 1 }
}},
{ $project: { count: 1} }
],
"posts": [
{$match: {$and: [
{user: ObjectId("596537d6b63edc2318ee9f0c")},
{parent: {$exists: false} }
]} },
{$group: {
_id : "$_id",
count: { $sum: 1 }
}},
{ $project: { count: 1} }
]
}
}]);
Können Sie vor Ort etwas falsch mit dem Code oben Nun scheint es zu arbeiten, aber ich bin sicher, es gibt eine Art von gotcha, dass im fehlt, da es zu einfach zu sein scheint?