javascript - 不明确的意外标识符错误

标签 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

最佳答案

我押注于使用奖励使用事件。这些是 shell 快捷方式,您不应该在常规 javascript 代码中使用它们。这是一个替代方案:

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

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

自然,事件也是如此。

关于javascript - 不明确的意外标识符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44465646/

相关文章:

javascript - React.js 表单 - 如何在最终页面上包含所有值?

Javascript - 使用英国格式和 moment.js 创建新日期

javascript - 通过属性进行 Angular 查找

javascript - 在 Angular 或 Node 中创建报告?生成 HTML 客户端还是服务器端?

mongodb - mongo 聚合管道的 $out 阶段未使用节点生效

mongodb - Mongo 的 ELT 管道

c# - mongoDB upsert 数组

javascript - 如何从 Mongoose 中的父字段的子文档更改字段