模糊的意外标识符错误

时间:2017-06-09 19:45:36

标签: javascript mongodb mongodb-query syntax-error identifier

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

1 个答案:

答案 0 :(得分:1)

我在use rewardsuse events投注。这些是shell快捷方式,你不应该在常规的javascript代码中使用它们。这是另一种选择:

不是通过use rewards切换数据库,而是使用此

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

事件也是如此。