2017-06-09 4 views
0

Mongo ist nicht mögen einige Bezeichner, die ich in der forEach Schleife mit der zweiten Aggregation habe, und für das Leben von mir kann ich nicht finden, welche es ist. Ich habe es den ganzen Tag angeschaut und an dieser Stelle brauche ich nur noch ein paar Augen darauf. Meine Augen, Gehirn und Herz danken Ihnen im Voraus! Verwendung EreignisseAmbiguous Unexpected Identifier Fehler

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) 

Und die aktuelle Fluch meines Lebens:

E QUERY SyntaxError: Unexpected identifier 
+0

Welche Zeile verursacht diesen Fehler? –

+0

kann ich nicht sagen! Mongo stellt keine Details zur Verfügung, ich habe das seit Stunden –

+0

Die erste Aggregation wird erfolgreich abgeschlossen, wenn ich es in Copy/Paste Ausführungen in der Shell aufteilen, der Fehler passiert irgendwo in der 'forEach' Schleife –

Antwort

1

Ich bin auf use rewards und use events Wetten. Das sind Shell-Shortcuts. Sie sollten sie nicht in der Mitte eines normalen Javascript-Codes verwenden. Hier ist eine Alternative:

Statt db über use rewards Verwendung dieses

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

Das Gleiche gilt für Ereignisse des Schaltens, natürlich.

+0

Ahhhh Ich habe keinen Fehler mit den Shell-Shortcuts zuvor, lass mich versuchen mit 'getSisterDB()' –

+0

@starscream_disco_party: so, hat es funktioniert? –

+0

Ja! Es hat leider eine Weile gedauert, bis ich zurück war –