我有一个Mongo集合,看起来如下:
[{
id: 1,
timestamp: 1534488870841,
type: 'deposit'
}, {
id: 1,
timestamp: 1534488915119,
type: 'deposit'
}]
如何进行查询以列出所有deposit
交易,按月分组。
必须使用timestamp
属性(UNIX毫秒)来计算月份。
我可以按如下方式获得押金,但不确定如何分组:
db.getCollection('transactions').find(
{"type":"deposit"});
编辑:Mongo 3.4版
答案 0 :(得分:3)
您可以在mongodb 4.0
中尝试以下聚合您可以使用$toDate
聚合将timestamp
转换为日期,然后使用$group
聚合将$month
转换为日期
db.collection.aggregate([
{ "$match": { "type": "deposits" }},
{ "$addFields": {
"date": {
"$toDate": "$timestamp"
}
}},
{ "$group": {
"_id": { "$month": "$date" },
"deposits": {
"$push": "$$ROOT"
}
}}
])
您可以在mongodb 3.4
中尝试以下聚合在 3.4 中,您可以通过在其中添加timestamp
和$group
使用$dateToString
聚合将new Date()
转换为日期
db.collection.aggregate([
{ "$match": { "type": "deposits" }},
{ "$addFields": {
"date": {
"$add": [ new Date(0), "$timestamp" ]
}
}},
{ "$group": {
"_id": {
"$dateToString": {
"format": "%m",
"date": "$date"
}
},
"deposits": {
"$push": "$$ROOT"
}
}}
])