Django 为什么此聚合查询在MongoDB中从命令行工作,而不是通过MongoEngine工作?

Django 为什么此聚合查询在MongoDB中从命令行工作,而不是通过MongoEngine工作?,django,mongodb-query,pymongo,aggregation-framework,mongoengine,Django,Mongodb Query,Pymongo,Aggregation Framework,Mongoengine,我有一个查询,当它直接在MongoDB中执行时,它会按预期运行,但我在试图通过MongoEngine使其工作时遇到了一些麻烦 开发环境 MongoDB 3.0.7 Mongoengine 0.10 Pymongo 3.1 Django 1.8.4 原始查询 当从命令行执行此查询时,它在MongoDB中执行得非常好,可以检索大量结果 db.collection.aggregate([{$project: { "variant":1, "version":1,

我有一个查询,当它直接在MongoDB中执行时,它会按预期运行,但我在试图通过MongoEngine使其工作时遇到了一些麻烦

开发环境

  • MongoDB 3.0.7
  • Mongoengine 0.10
  • Pymongo 3.1
  • Django 1.8.4
  • 原始查询

    当从命令行执行此查询时,它在MongoDB中执行得非常好,可以检索大量结果

    db.collection.aggregate([{$project: {
             "variant":1,
             "version":1,
             "date":1,
               "quarter":{$cond:[{$lte:[{$month:"$date"},3]},
                            "Q1",
                            {$cond:[{$lte:[{$month:"$date"},6]},
                                    "Q2",
                                    {$cond:[{$lte:[{$month:"$date"},9]},
                                            "Q3",
                                            "Q4"]}]}]}}},{$group:{"_id":{"quarter":"$quarter", "year":{$year:"$date"}},
      "total":{$sum:1},
      "details":{$push:{
         variant:"$variant",
         version:"$version",
         date:"$date" }}}}])
    
    MONGOENGINE查询

    这是我在MongoEngine中的尝试。 它抛出“管道元素1不是对象”错误


    我做错了什么?

    我只需要删除括号并将逗号分隔的参数传递给聚合方法

    project = {"$project": {
            "variant":1,
            "version":1,
            "date":1,
            "quarter":{"$cond":[{"$lte":[{"$month":"$date"},3]},
                        "Q1",
                        {"$cond":[{"$lte":[{"$month":"$date"},6]},
                              "Q2",
                              {"$cond":[{"$lte":[{"$month":"$date"},9]},
                                    "Q3",
                                    "Q4"]}]}]}}}
    group = {"$group":{"_id":{"quarter":"$quarter", "year":{"$year":"$date"}},
         "total":{"$sum":1},
         "details":{"$push":{
            "variant":"$variant",
            "version":"$version",
            "date":"$date" }}}}
    
    queryset = Collection.objects.aggregate( project, group )
    
    project = {"$project": {
            "variant":1,
            "version":1,
            "date":1,
            "quarter":{"$cond":[{"$lte":[{"$month":"$date"},3]},
                        "Q1",
                        {"$cond":[{"$lte":[{"$month":"$date"},6]},
                              "Q2",
                              {"$cond":[{"$lte":[{"$month":"$date"},9]},
                                    "Q3",
                                    "Q4"]}]}]}}}
    group = {"$group":{"_id":{"quarter":"$quarter", "year":{"$year":"$date"}},
         "total":{"$sum":1},
         "details":{"$push":{
            "variant":"$variant",
            "version":"$version",
            "date":"$date" }}}}
    
    queryset = Collection.objects.aggregate( project, group )