MongoDB聚合查询添加到管道导致没有结果

时间:2018-03-12 09:11:59

标签: json mongodb pymongo ordereddictionary aggregates

我正在通过PyMongo运行聚合。

汇总,格式相当好,看起来像这样:

[{
    $match: {
        syscode: {
            $in: [598.0]
        },
        date: {
            $gte: newDate(1509487200000),
            $lte: newDate(1510264800000)
        }
    }
},
{
    $group: {
        _id: {
            date: "$date",
            start_date: "$start_date",
            end_date: "$end_date",
            daypart: "$daypart",
            network: "$network"
        },
        syscode_data: {
            $push: {
                syscode: "$syscode",
                cpm: "$cpm"
            }
        }
    }
}]

当我在Python中使用光标上的.explode方法时,它不返回任何结果。

当我通过NoSQL Booster为MongoDB运行它时,我得到了结果。也就是说,当我通过PyMongo运行它时,Mongo日志文件没有改变。

当我查看Mongo日志时,会添加一个额外的管道组。显然,助推器知道该如何处理,而我却不知道。

{ $group: { _id: null, count: { $sum: 1.0 } } }

这是我看到的完整日志行。

2018-03-11T21:05:04.374+0200 I COMMAND  [conn71] command Customer.weird_stuff command: aggregate { aggregate: "rate_cards", pipeline: [ { $match: { syscode: { $in: [ 598.0 ] }, date: { $gte: new Date(1509487200000), $lte: new Date(1510264800000) } } }, { $group: { _id: { date: "$date", start_date: "$start_date", end_date: "$end_date", daypart: "$daypart", network: "$network" }, syscode_data: { $push: { syscode: "$syscode", cpm: "$cpm" } } } }, { $group: { _id: null, count: { $sum: 1.0 } } } ], cursor: { batchSize: 1000.0 }, $db: "Customer" } planSummary: COLLSCAN keysExamined:0 docsExamined:102900 cursorExhausted:1 numYields:803 nreturned:1 reslen:134 locks:{ Global: { acquireCount: { r: 1610 } }, Database: { acquireCount: { r: 805 } }, Collection: { acquireCount: { r: 805 } } } protocol:op_query 122ms

发生了什么事?我如何从Python方面处理这个问题?

当我正在挖掘时注意:当我幸运并且使用Pymongo的无序字典(默认)时,此管道会运行。当我通过JSON.Jsondecoder运行输入JSON时使用以下行:

json.JSONDecoder(object_pairs_hook=OrderedDict).decode(parsed_param) 

输出格式非常复杂(由于管道需要维护其顺序而必需)并最终传递了额外的部分。

1 个答案:

答案 0 :(得分:0)

所以,由于缺乏兴趣,我找到了解决方法。检查问题后,我发现当我向管道({"$sort": {"_id": 1}})添加一个额外步骤时,从Python字典到Mongo JSON聚合的转换不会生成额外的JSON对象。

这是一个糟糕的答案,但我认为根本原因是在这个特定环境中复杂有序字典和Mongo JSON查询之间的转换有一个影响这个特定查询的小错误。

我很高兴能够找到它并进一步检查,但我被埋没在一份新工作中。

相关问题