我有一个Mongo DB查询,需要使用MongoEngine进行转换。考虑下面的查询,我想在MongoEngine ORM中实现相同的查询。我对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查询将给出以下结果
{ “ skill1”:40, “ skill2”:50, “ skill3”:23, 。 。 。 。 。 。 。 }
我希望得到相同的结果。但是实现应来自MongoEngine ORM。
答案 0 :(得分:0)
有了模型和管道后,就可以使用YourModel.objects.aggregate()
(doc)来运行它。
例如:
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'}]
编辑:
由于其复杂的特性,mongoengine中没有更好(或更多的ORM形式)的聚合支持,它是通往pymongo的简单网关。 (此处为mongoengine维护者)