不明确的意外标识符错误

Ambiguous Unexpected Identifier error

Mongo 不喜欢我在包含第二个聚合的 forEach 循环中得到的某个标识符,而且我终究找不到它是哪个标识符。我整天都在看着它,此时我只需要另一双眼睛在看它。我的眼睛、大脑和心脏提前谢谢你! 使用事件

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)

以及目前我存在的祸根:

E QUERY    SyntaxError: Unexpected identifier

我打赌 use rewardsuse events。这些是 shell 快捷方式,您不应该在常规 javascript 代码中间使用它们。这是一个替代方案:

不要通过 use rewards 切换数据库,而是使用这个

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

活动自然也是如此。