Django 为什么此聚合查询在MongoDB中从命令行工作,而不是通过MongoEngine工作?
我有一个查询,当它直接在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,
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 )