我在 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
答案 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编写的