作为Python / MongoDB / pymongo的新手,我使用Studio 3T生成一个工作聚合管道,用于访问和处理mongoDB集合的内容。我可以看到它在那里完美地工作并输出预期的结果。问题是Studio 3T为代码生成了一个.js文件,而我需要在包装器中用Python编写代码。
代码在Studio 3T上正确执行:
db.cln_matching_results.aggregate(
// Pipeline
[
// Stage 1
{
$unwind: {
path : '$_availability',
includeArrayIndex : 'arrayIndex', // optional
preserveNullAndEmptyArrays : false // optional
}
},
// Stage 2
{
$unwind: {
path : '$_availability.availability_data',
includeArrayIndex : 'arrayIndex', // optional
preserveNullAndEmptyArrays : false // optional
}
},
// Stage 3
{
$match: {
'_availability.availability_data.start_date': {$gte: "2017-09-14T00:00:00.000Z", $lte: "2017-09-31T00:00:00.000Z"}
}
},
// Stage 4
{
$group: {
_id : '$_id',
MD_offered_max: { $sum: { $divide: [ "$_availability.availability_data.value", 100 ] } }
}
},
]);
我尝试在Python包装器中复制工作代码会破坏管道并在执行后提供一个空数组。我强调,当我注释掉下面的代码时,其余的python代码完全正常:
test_pipeline.extend([
{"$unwind": {'path': '$_availability', 'preserveNullAndEmptyArrays': False}},
{"$unwind": {'path': '$_availability.availability_data', 'preserveNullAndEmptyArrays': False}},
{'$match': {'$_availability.availability_data.start_date': {'$gte': "2017-09-14T00:00:00.000Z", '$lte': "2017-09-16T00:00:00.000Z"}}},
{'$group':{'_id' : '$_id', 'MD_offered_max': { '$sum': { '$divide': [ "$_availability.availability_data.value", 100 ] } }}},
{'$addFields': {'availability_scoring': '$MD_offered_max'}}
])
我的问题是:在尝试将代码从.js格式转换为Python时,我在哪里出错了?谢谢你的帮助。