Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何将Mongo DB查询转换为Mongoengine_Mongodb_Pymongo_Mongoengine - Fatal编程技术网

Mongodb 如何将Mongo DB查询转换为Mongoengine

Mongodb 如何将Mongo DB查询转换为Mongoengine,mongodb,pymongo,mongoengine,Mongodb,Pymongo,Mongoengine,我有一个Mongo DB查询,需要使用MongoEngine进行转换。考虑下面的查询,我想在MungEngEngORM中实现相同的查询。我对MongoDB和MongoEngine非常陌生。提前谢谢 db.my_collection.aggregate([ { $unwind:"$quizzes" }, { $group:{ "_id":"$quizzes.skill", "k":{

我有一个Mongo DB查询,需要使用MongoEngine进行转换。考虑下面的查询,我想在MungEngEngORM中实现相同的查询。我对MongoDB和MongoEngine非常陌生。提前谢谢

    db.my_collection.aggregate([
    {
        $unwind:"$quizzes"
    },
    {
        $group:{
            "_id":"$quizzes.skill",
            "k":{
                $first:"$quizzes.skill"
            },
            "v":{
                $sum:1
            }
        }
    },
    {
        $project:{
            "_id":0
        }
    },
    {
        $group:{
            "_id":null,
            "data":{
                $push:"$$ROOT"
            }
        }
    },
    {
        $project:{
            "data":{
                $arrayToObject:"$data"
            }
        }
    },
    {
        $replaceRoot:{
            "newRoot":"$data"
        }
    }
]).pretty()
上面的mongo查询将给出以下结果

{ “技能1”:40, “技能2”:50, “技能3”:23, . . . . . . . }


我想得到同样的结果。但是实现应该来自MongoEngine ORM。

一旦您有了模型和管道,就可以使用
YourModel.objects.aggregate()
()来运行它

例如:

编辑:


由于其复杂性,mongoengine中没有更好(或更多)的聚合支持,它是通往pymongo的简单网关。(这里是mongoengine维护人员)

感谢您的回复。我已经用我需要的回答更新了这个问题。请看一下描述和更新。
class Person(Document):
    name = StringField()

agg_pipeline = [{"$project": {"name": {"$toUpper": "$name"}}}]
agg_result = list(Person.objects.aggregate(*agg_pipeline))

print(agg_result)    # prints [{'_id': ObjectId('5d69225b44fec38d49c050f2'), 'name': 'JOHN'}]