Wählen Sie in der gleichen mongodb-Abfrage Gruppierung nach Anzahl und eindeutiger Anzahl aus
Ich versuche, etwas zu tun, wie
select campaign_id,campaign_name,count(subscriber_id),count(distinct subscriber_id)
group by campaign_id,campaign_name from campaigns;
Diese Abfrage, indem Ergebnisse außer count(distinct subscriber_id)
db.campaigns.aggregate([
{$match: {subscriber_id: {$ne: null}}},
{$group: {
_id: {campaign_id: "$campaign_id",campaign_name: "$campaign_name"},
count: {$sum: 1}
}}
])
Diese folgende Abfrage, indem Ergebnisse außer count(subscriber_id)
db.campaigns_logs.aggregate([
{$match : {subscriber_id: {$ne: null}}},
{$group : { _id: {campaign_id: "$campaign_id",campaign_name: "$campaign_name",subscriber_id: "$subscriber_id"}}},
{$group : { _id: {campaign_id: "$campaign_id",campaign_name: "$campaign_name"},
count: {$sum: 1}
}}
])
aber ich will count(subscriber_id),count(distinct subscriber_id) das gleiche Ergebnis
InformationsquelleAutor der Frage Rams | 2014-07-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie beginnen zu denken in die richtige Richtung hier, wie Sie die Spitze in die richtige Richtung. Ändern Sie Ihre SQL-Mentalität, "distinct" ist eigentlich nur eine andere Schreibweise einer
$group
Betrieb in einer der beiden Sprachen. Das bedeutet, dass Sie haben zwei Gruppe Operationen, was hier passiert und aggregation pipeline-Bedingungen, zwei pipeline-Stufen.Nur mit vereinfachten Unterlagen zu visualisieren:
Liegt es nahe, dass für die "Kampagne" Kombination die total count und distinct count "3" und "2" ersetzt. So war die logische Sache zu tun ist "Gruppe" bis alle diese "subscriber_id" Werte zuerst und halten Sie die Anzahl der vorkommen für jeden, dann denken während der "pipeline", "total" diejenigen, die counts pro "Kampagne" und dann einfach die Anzahl der "distinct" vorkommen, wie eine separate Nummer:
Nach der ersten "Gruppe" die Ausgabe Dokumente können so visualisiert:
Also von der "drei" Dokumente in der Stichprobe, "2" gehören zu einem einzelnen Wert und "1" zu einem anderen. Dies kann noch summiert werden mit
$Summe
um die insgesamt übereinstimmenden Dokumente, die Sie in der folgenden Etappe, mit dem Ergebnis:Eine wirklich gute Analogie für die aggregation pipeline ist die unix-pipe " | " - operator, die erlaubt, die "Verkettung" von Operationen, also können Sie übergeben Sie die Ausgabe eines Befehls, durch den Eingang des nächsten, und so weiter. Angefangen zu denken, Ihre Anforderungen an die Verarbeitung auf diese Weise wird Ihnen helfen zu verstehen Operationen mit der aggregation pipeline besser.
InformationsquelleAutor der Antwort Neil Lunn
SQL-Abfrage: (group by & Anzahl der distinct)
Den Gegenwert mongo-Abfrage würde wie folgt Aussehen:
InformationsquelleAutor der Antwort Surendranath Reddy K