将聚合数据从mongoDB写回到不同的集合中

时间:2016-11-01 11:34:52

标签: mongodb python-2.7 pymongo

我在 mongodb 中有一些数据,因为我找到了一组数据并将其存储回不同的mongo集合。这是我尝试过的方法。但它给了我错误。

from pymongo import MongoClient
Client= MongoClient()
db= Client["myntra"]
collection= db["women.trouser"]
pipeline=[]
pipeline = [
    {'$group':
         {'_id':
              {'objectId':"$_id",
               'styleOptions_skuAvailabilityDetailMap_availableCount':"$pdpData.styleOptions.skuAvailabilityDetailMap.19.availableCount",
               'styleOptions_skuId':"$pdpData.styleOptions.skuId",}
          }
     }
]



cursor = db.women.duplicate.trouser.aggregate(pipeline,{'$out':'women.duplicate.trouser'})#{ 'allowDiskUse': True}))
print cursor

1 个答案:

答案 0 :(得分:3)

两个问题:

首先,aggregation operator $out是管道的一部分。 PyMongo aggregate()方法接受所有管道阶段作为第一个参数。

因此,您应该将$ out组合到管道变量中,例如:

pipeline = [
     {'$group': { ... } },
     {'$out': { ... } }   
]

有关更多示例,请参阅PyMongo Aggregation Examples

其次,您将输出集合指定为与输入集合相同。请注意$ out运算符replaces existing collection。另请参阅$out examples

总结一下,下面是您的代码,其中包含一些修复:

from pymongo import MongoClient
client= MongoClient()
collection= db["myntra"]["women.trouser"]
pipeline = [
    {'$group':
         {'_id':
              {'objectId':"$_id",               
               'styleOptions_skuAvailabilityDetailMap_availableCount':"$pdpData.styleOptions.skuAvailabilityDetailMap.19.availableCount",
               'styleOptions_skuId':"$pdpData.styleOptions.skuId",}
          }
     }, 
    {'$out': 'women.duplicate.trouser' }
]

cursor = db.collection.aggregate(pipeline, { 'allowDiskUse': True} )
print cursor

上面的代码段是为PyMongo v3.3和MongoDB v3.2.x编写的