2016-06-22 20 views
1

Ich habe Daten in MongoDB im folgenden Format gespeichert.allowDiskUse funktioniert nicht in pymongo

{ 
    "_id" : ObjectId("570b487fb5360dd1e5ef840c"), 
    "internal_id" : 1, 
    "created_at" : ISODate("2015-07-14T10:08:38.994Z"), 
    "updated_at" : ISODate("2016-01-10T00:35:19.748Z"), 
    "ad_account_id" : 1, 
    "updated_time" : "2013-08-05T04:48:49-0700", 
    "created_time" : "2013-08-05T04:46:35-0700", 
    "name" : "Sale1", 
    "daily": [ 
       {"clicks": 5000, "date": "2015-04-16"}, 
       {"clicks": 5100, "date": "2015-04-17"}, 
       {"clicks": 5030, "date": "2015-04-20"} 
      ] 
    "custom_tags" : { 
     "Event" : { 
      "name" : "Clicks" 
     }, 
     "Objective" : { 
      "name" : "Sale" 
     }, 
     "Image" : { 
      "name" : "43c3fe7b262cde5f476ed303e472c65a" 
     }, 
     "Goal" : { 
      "name" : "10" 
     }, 
     "Type" : { 
      "name" : "None" 
     }, 
     "Call To Action" : { 
      "name" : "None", 
     }, 
     "Landing Pages" : { 
      "name" : "www.google.com", 
    } 
} 

Ich versuche, zu gruppieren einzelne Dokumente durch internal_id die Gesamtsumme von Klicks zu finden, von sagen wir 2015-04-15-2015-04-21 die aggregate Methode.

In pymongo, wenn ich versuche, ein aggregate nur $project auf internal_id mit zu tun, erhalte ich die Ergebnisse, aber wenn ich zu $projectcustom_tags Feldern versuchen, erhalte ich folgende Fehlermeldung:

OperationFailure: Exceeded memory limit for $group, but didn't allow external sort. 
Pass allowDiskUse:true to opt in. 

die Antwort Nach here, änderte ich sogar meine Aggregatfunktion zu list(collection._get_collection().aggregate(mongo_query["pipeline"], allowDiskUse=True)). Aber das wirft immer noch den früheren Fehler auf.

Antwort

0

Versuchen mit, dass:

Liste (. Collection._get_collection() Aggregat (mongo_query [ "Pipeline"], {allowDiskUse: true}))

0

Werfen Sie einen Blick auf diesen Link: Can't get allowDiskUse:True to work with pymongo

Dies funktioniert für mich:

someSampleList= db.collectionName.aggregate(pipeline, allowDiskUse=True) 

Wo

pipeline = [ 
    {'$sort': {'sortField': 1}}, 
    {'$group': {'_id': '$distinctField'}}, 
    {'$limit': 20000}]