2017-01-30 6 views
1

Ich habe eine Tweet-Liste, die drei Felder enthält, Tweet ID, TopicIdTag und Typ. Typ hat drei verschiedene Werte. Ich bekomme das Ergebnis, aber weiter möchte ich jeden Typ zählen. Mein Modell und der Abfragecode lauten wie folgt.Summe von 3 verschiedenen Werten getrennt MongoDb

model : { 
     TopicIdTag : String, 
     TweetId : String, 
     type :String //Positive,negative,neutral 
    }, 

db.collection("myTweets").aggregate([ 
            { 
            $group: { 
             _id: { 
              TopicIdTag : "$TopicIdTag", 
              TweetId : "$TweetId", 
             }, 
             count: { $sum: 1 } 
            } 
            }, 
            { $match: { count: { $gt: 0 , $lt : 5 } } }, 
           // Then sort 
            { "$sort": { "count": -1 } } 
           ], (err, result) => { 
            if (err) { 
             console.log(err); 
            } 
            res.status(200).send(result); 
           }); 

     }); 

diese Abfrage geben mir Gesamtzahl Tweets-Gruppe von ID. Die Abfrage sollte außerdem zurückgeben, wie viele Zeittypen in einer bestimmten Tweet-ID positiv, negativ und neutral waren.

+0

Hinzufügen Typ in der $ Gruppenphase sollten Sie geben eine Anzahl von jeder Art, aber um ehrlich zu sein ich glaube nicht, dass ich uderstand, was los ist, warum whould Sie Gruppe von TweetId? Ist TweetId nicht einzigartig? – lascort

+0

eine tweetID hat mehrere Einträge. Es gibt einige andere Einträge, die ich hier übersprungen habe –

Antwort

0

Sie können die vorhandene $group aktualisieren type aufzunehmen und zu zählen durch type und eine andere Gruppe mit $addtoSet hinzufügen pro jeder type und count und Gesamtanzahl von TopicIdTag & TweetId einen Eintrag hinzuzufügen.

db.collection("tweets").aggregate([{ 
    $group: { 
     _id: { 
      Time: "$Time", 
      TopicIdTag: "$TopicIdTag", 
      TweetId: "$TweetId", 
      TweetText: "$TweetText", 
      UserName: "$UserName", 
      UserScreenname: "$UserScreenname", 
      sentimentNumber: "$sentimentNumber", 
      setimentText: "$setimentText", 
      //user feed back type 
      type: "$type" 
     }, 
     count: { 
      $sum: 1 
     } 
    } 
}, { 
    $group: { 
     _id: { 
      Time: "$_id.Time", 
      TopicIdTag: "$_id.TopicIdTag", 
      TweetId: "$_id.TweetId", 
      TweetText: "$_id.TweetText", 
      UserName: "$_id.UserName", 
      UserScreenname: "$_id.UserScreenname", 
      sentimentNumber: "$_id.sentimentNumber", 
      setimentText: "$_id.setimentText" 
     }, 
     typeAndCount: { 
      $addToSet: { 
       type: "$_id.type", 
       count: "$count" 
      } 
     }, 
     totalCount: { 
      $sum: 1 
     } 
    } 
}, { 
    $match: { 
     totalCount: { 
      $gt: 0, 
      $lt: 5 
     } 
    } 
}]) 
+0

Ich bekomme die leere Zeichenfolge. Ich mache mir etwas Unrecht. Ich habe meine Anfrage aktualisiert. Bitte überprüfen Sie sie. –

+0

Aktualisierte Antwort. Sie haben die Referenz "_id" in der letzten Gruppe verpasst. Sehen Sie, ob es funktioniert. – Veeram

+0

Ihre Anfrage funktioniert einwandfrei. eine Sache noch totalCount gibt die Gesamtzahl der Art nicht die tatsächliche Anzahl der Hauptgruppe. Wie kann ich bekommen, dass eine für Exame Count 24 sein sollte, wenn (type1 = 11, type2 = 15) –

Verwandte Themen