mongoDB查询结果输出
我收集了以下文件:mongoDB查询结果输出,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我收集了以下文件: { “_id”:ObjectId(“539c118b310c022c947b0055”), “术语”:“航空风暴之旅”, “年份”:“2015年”, “月”:“06”, “日”:“01”, “小时”:“17”, “dayofyear”:“4”, “周年”:“22”, “productcount”:0, “计数”:22 }, { “_id”:ObjectId(“558c118b310c022c947b1145”), “术语”:“航空”, “年份”:“2015年”, “月”:“0
{
“_id”:ObjectId(“539c118b310c022c947b0055”),
“术语”:“航空风暴之旅”,
“年份”:“2015年”,
“月”:“06”,
“日”:“01”,
“小时”:“17”,
“dayofyear”:“4”,
“周年”:“22”,
“productcount”:0,
“计数”:22
},
{
“_id”:ObjectId(“558c118b310c022c947b1145”),
“术语”:“航空”,
“年份”:“2015年”,
“月”:“06”,
“日”:“01”,
“小时”:“17”,
“dayofyear”:“4”,
“周年”:“22”,
“productcount”:0,
“计数”:21
},
{
“_id”:ObjectId(“558c992b310c022c947b0055”),
“术语”:“航空风暴之旅”,
“年份”:“2015年”,
“月”:“06”,
“日”:“01”,
“小时”:“17”,
“dayofyear”:“1”,
“周年”:“22”,
“productcount”:0,
“计数”:2
},
{
“_id”:ObjectId(“558c118b123c022c947b0055”),
“术语”:“航空风暴之旅”,
“年份”:“2014年”,
“月”:“06”,
“日”:“01”,
“小时”:“17”,
“dayofyear”:“364”,
“周年”:“22”,
“productcount”:0,
“计数”:32
},
{
“_id”:ObjectId(“558c223c310c022c947b0055”),
“术语”:“航空风暴之旅”,
“年份”:“2014年”,
“月”:“06”,
“日”:“01”,
“小时”:“17”,
“dayofyear”:“365”,
“周年”:“22”,
“productcount”:0,
“计数”:22
}
我需要根据year
和dayofyear
指定的条件计算count
和term
的总和
我的问题是:
db.tq.aggregate(
{$match:
{$or:[
{$和:[{dayofyear:{$gte:“1”,$lte:“4”},{year:“2015”}]},
{$and:[{dayofyear:{$gte:“363”,$lte:“365”},{year:“2014”}]}
]
}
},
{$group:{
_id:“$term”,
总数:{
$sum:“$count”
}
}
},
{
$sort:{totalcount:-1}
}
)
在这里,我手动指定了2015年1月4日至2014年363月365日之间的日期
但它并没有给出预期的结果。有人能指出我的查询中的错误吗?您在一个字符串字段上使用了$gte。请查看此线程:更切题:“400”小于“8”。这就是词法字符串匹配的工作原理。您需要将它们转换为数值。同时将“日期”存储为
Date
对象。您可以使用适当的Date
对象执行所有相同的操作,这样做所需的存储空间“大大”减少。实际上,您的查询给出了正确的结果(使用这些参数和示例数据,但不要指望它)。但是@ZeMoon已经给了你一个链接,其中有一个建议可以使用,因为它是JavaScriptparseInt
或者甚至正确地强制转换到Date
逻辑中的对象都是您的朋友。另外,如果你想让你的老板更改数据,这里的整个团队都会帮你对付他/她:)