2017-06-09 8 views
0

Mongoは、forEachのループで2番目の集約を保持している識別子を好きではありません。私は終日それを見てきましたが、この時点でもう一組の目が必要です。私の目、脳、心臓は事前に感謝します! 使用イベントあいまいな予期しない識別子エラー

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 
+0

どの行でエラーが発生しますか? –

+0

私には分かりません! Mongoは何も詳細を提供していません。私は今これを数時間見ています –

+0

最初の集約は、シェルのコピー/ペースト実行に分割すると成功します。エラーはforEachループのどこかで発生しています –

答えて

1

私はuse rewardsuse eventsに賭けています。それらはシェルショートカットです。通常のJavaScriptコードの中でそれらを使用するはずがありません。ここでは、代替です:

代わりに、use rewards使用を経由してのイベントのために、この

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

同じデシベルを切り替えるの自然。

+0

Ahhhhシェルのショートカットを使用する前にエラーが発生していないので、試してみてください 'getSisterDB()' –

+0

@starscream_disco_party:そうです、それは機能しましたか? –

+0

はい!申し訳ありません、戻ってくるのにしばらくかかりました –

関連する問題