starscream_disco_party
starscream_disco_party

Reputation: 2996

Ambiguous Unexpected Identifier error

Mongo isn't liking some identifier that I've got in the forEach loop holding the second aggregation, and for the life of me I can't find which one it is. I've been looking at it all day and at this point I just need another pair of eyes on it. My eyes, brain, and heart thank you in advance! use events

var affected = []
var start = new Date()
var end = new Date("2017-06-01T00:00:00Z")

for (var dayPast = new Date(start); start >= end; start.setDate(start.getDate() - 1)) {
  dayPast.setDate(dayPast.getDate() - 1)

  var results = db.completion_event.aggregate([{
    $match: {
      applicationId: 1,
      dateCreated: {
        $lt: start,
        $gte: dayPast
      },
      "data.name": "eventComplete",
      "data.metadata.aggregationId": /identifying_string.*/,
      "data.sponsorIds": {$in: [1,2,3,4,5,6]}
    }
  }, {
    $project: {
      customerId: 1,
      dateCreated: 1,
      "data.metadata.aggregationId": 1
    }
  }, {
    $group: {
      _id: {
        customerId: "$customerId",
        dateCreated: "$dateCreated",
        aggregationId: "$data.metadata.aggregationId"
      },
      "total": {
        $sum: 1
      }
    }
  }], {
    $limit: 1
  }, {
    allowDiskUse: true
  }).toArray()

  results.forEach(function(event) {
    use rewards

    var state = db.customer_state.find({customerId: event._id.customerId}).sort({_id: -1}).limit(1).toArray()[0]
    var planId = state.planId
    var plan = db.plan.find({id: planId}).toArray()[0]

    if(plan.schedule.activeStart < new Date() < plan.schedule.activeEnd) {
      use events
      var latest = db.completion_event.aggregate([{
        $match: {
          applicationId: 1,
          customerId: event._id.customerId,
          dateCreated: {
            $gte: plan.schedule.activeStart
          },
          "data.name": "outterEventComplete",
          "data.metadata.aggregationId": event._id.aggregationId
        }
      },
      {
        $project: {
          consumerId: 1,
          dateCreated: 1,
          "data.sponsorIds": 1,
          "data.metadata.aggregationId": 1
        }
      }], {
        $limit: 1
      }).toArray()
      affected.push(latest[0])
    }
  })
}
print(affected)

And the current bane of my existence:

E QUERY    SyntaxError: Unexpected identifier

Upvotes: 0

Views: 154

Answers (1)

Sergio Tulentsev
Sergio Tulentsev

Reputation: 230336

I'm betting on use rewards and use events. Those are shell shortcuts, you're not supposed to use them in the middle of regular javascript code. Here's an alternative:

Instead of switching db via use rewards use this

var rewards_db = db.getSisterDB('rewards');
rewards_db.customer_state.find(...)

Same for events, naturally.

Upvotes: 1

Related Questions