MongoDb如何从字符串按月份和年份分组
我正在收集字段dateStrMongoDb如何从字符串按月份和年份分组,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我正在收集字段dateStr { .... "dateStr" : "07/01/2020" .... } { .... "dateStr" : "07/01/1970" .... } 我想从dateStr字段按月份和年份分组 我试过了 db.collection.aggregate( {$project : { month : {$month : new Date("$dateStr")},
{ .... "dateStr" : "07/01/2020" .... }
{ .... "dateStr" : "07/01/1970" .... }
我想从dateStr字段按月份和年份分组
我试过了
db.collection.aggregate(
{$project : {
month : {$month : new Date("$dateStr")},
year : {$year : new Date("$dateStr")}
}},
{$group : {
_id : {month : "$month" ,year : "$year" },
count : {$sum : 1}
}})
输出:
{
"result" : [
{
"_id" : {
"month" : 1,
"year" : 1970
},
"count" : 2
}
],
"ok" : 1
}
但我有两年的时间,1970年到2020年。为什么我会得到一张唱片 不能在对象本身以外的任何对象上使用。您最终的最佳选择是将这些“字符串”转换为适当的对象,这样您就可以在此操作和将来的操作中正确查询
也就是说,如果你的“字符串”总是有一个共同的结构,那么有一种方法可以通过工具来实现。它需要大量的操作思想,但这并不能使它成为处理问题的“最佳”方法。但是,使用“两位数”的集合结构和一致的分隔符,可以使用运算符:
db.collection.aggregate([
{“$组”:{
“_id”:{
“年份:{“$substr”:[“$dateStr”,7,4]},
“月”:{“$substr”:[“$dateStr”,4,2]}
},
“计数”:{“$sum”:1}
}}
])
因此JavaScript转换在聚合框架内不起作用。您始终可以基于“客户机代码”评估将输入“馈送”到管道,但聚合过程本身不会评估任何代码。与基本查询引擎一样,这一切都基于“数据结构”实现,使用“本机运算符”指令来完成工作
不能在聚合管道中将字符串转换为日期。您应该使用真实的对象,但是如果有一种一致的格式,您可以以“词汇顺序”表示,那么您可以使用字符串
我仍然建议您尽快将这些转换为日期。请注意,“ISODate”或UTC值是用不同的字符串形式构造的。即:
新日期(“2020-01-07”)
采用“yyyy-mm-dd”格式。至少是JavaScript调用。谢谢。这很有帮助。它正在工作。我同意你的观点。我将根据bson date对象进行适当的分组。@Ramesh好消息。然后可以使用原始代码示例中所示的。