0

based on other solution I have the following data stored on my mongo instance and i am trying to sum from each document the occurrences of each word looping on all documents, so final result should be aggregation by name with sum of all occurrences.

[
  {
    "_id": {
      "$oid": "5f972f0a7c38a0f412d88ad0"
    },
    "cars": 1,
    "collision": 1,
    "crash": 1,
    "eleven": 1,
    "injured": 1,
    "involving": 1
  },
  {
    "_id": {
      "$oid": "5f972f0a7c38a0f412d88b96"
    },
    "injured": 1,
    "and": 1,
    "man": 1,
    "attack": 1,
    "ashfield": 1,
    "dog": 1,
    "killed": 1,
    "labrador": 1,
    "sutton": 1
  },
  {
    "_id": {
      "$oid": "5f972f0a7c38a0f412d88ad2"
    },
    "the": 1,
    "'var": 1,
    "accountable'": 1,
    "day": 1,
    "goal": 1,
    "have": 1,
    "lacazette's": 1,
    "match": 1,
    "should": 1,
    "stood": 1
  },
....

and i execute the following Nodejs execution using MongoDB driver:

await db.collection('occurrences').aggregate([{
            $project: {
              _id: 0,
              fields: {
                $filter: {
                  input: { $objectToArray: "$$ROOT" },
                  cond: { $eq: [
                      { $type: "$$this.v"
                      },
                      "double"
                    ] }
                }
              }
            }
          },
            {
              $unwind: "$fields"
            },
            {
              $group: {
                _id: "$fields.k",
                total: {
                  $sum: "$fields.v"
                }
              }
            },
            {
              $group: {
                _id: null,
                aggregates: {
                  $push:
                      { k: "$_id",
                        v: "$total"
                      }
                }
              }
            },
            {
              $replaceRoot: {
                newRoot: { $arrayToObject: "$aggregates" }
              }
            }]).toArray(function (err, docs) {
              console.log(docs)
      })

now my wish is to sum all word occurrences into object as follows:

{injured: 2, attack: 1, ....}

currently i am getting an empty array while i am printing console.log

Matan Tubul
  • 774
  • 3
  • 11
  • 33

1 Answers1

0

I found the mistake, in my case all i need to change is

cond: { $eq: [
                      { $type: "$$this.v"
                      },
                      "double"
                    ] }

into

cond: { $eq: [
                      { $type: "$$this.v"
                      },
                      "int"
                    ] }
Matan Tubul
  • 774
  • 3
  • 11
  • 33