Mongodb 如何将Mongo DB查询转换为Mongoengine
我有一个Mongo DB查询,需要使用MongoEngine进行转换。考虑下面的查询,我想在MungEngEngORM中实现相同的查询。我对MongoDB和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":{
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'}]