从对象中的日期创建月键
creating month key from date in objects
这是我的数据:
{
"_id": ObjectId("6213ba90a013b7c5f1232e1f"),
"name": "name1",
"surname": "surname1",
"newArray": {
"buyDate": ISODate("1975-11-04T13:14:15Z"),
"carCount": 3,
"name": "name1",
"surname": "surname1"
}
},
{
"_id": ObjectId("6213ba90a013b7c5f1232e2f"),
"name": "name2",
"surname": "surname2",
"newArray": {
"buyDate": ISODate("1978-12-07T15:30:15Z"),
"carCount": 7,
"name": "name2",
"surname": "surname2"
}
},
{
"_id": ObjectId("6213ba90a013b7c5f1232e3f"),
"name": "name3",
"surname": "surname3",
"newArray": {
"buyDate": ISODate("1983-11-12T18:40:15Z"),
"carCount": 4,
"name": "name3",
"surname": "surname3"
}
}
我想按购买月份计算汽车数量。首先,我想找到所有“newArray”的购买月份,然后添加到所有“newArray”。我的意思是:
{
"_id": ObjectId("6213ba90a013b7c5f1232e1f"),
"name": "name1",
"surname": "surname1",
"newArray": {
"buyDate": ISODate("1975-11-04T13:14:15Z"),
"carCount": 3,
"name": "name1",
"surname": "surname1",
"buyMonth": 11
}
},
{
"_id": ObjectId("6213ba90a013b7c5f1232e2f"),
"name": "name2",
"surname": "surname2",
"newArray": {
"buyDate": ISODate("1978-12-07T15:30:15Z"),
"carCount": 7,
"name": "name2",
"surname": "surname2",
"buyMonth": 12
}
},
{
"_id": ObjectId("6213ba90a013b7c5f1232e3f"),
"name": "name3",
"surname": "surname3",
"newArray": {
"buyDate": ISODate("1983-11-12T18:40:15Z"),
"carCount": 4,
"name": "name3",
"surname": "surname3",
"buyMonth": 11
}
}
最后我会根据他们的购买月份来计算汽车数量。我试过了,但没有得到任何结果:
db.collection.aggregate([
{
$set: {
"newArray.buyMonth": "$buyDate.month"
}
},
{
"$group": {
"_id": "$buyMonth",
"carCountByMonth": {
"$count": "newArray"
}
}
}
])
我怎样才能得到我想要的?提前致谢。
- 要从日期中获取月份,请使用
$month
运算符。
- 要获得
newArray.buyDate
,请使用 newArray.buyDate
而不是 buyDate
。
$group
newArray.buyMonth
但不是 buyMonth
.
- 使用
$sum
计算所有newArray.carCount
的总和而不是$count
。
db.collection.aggregate([
{
$set: {
"newArray.buyMonth": {
$month: "$newArray.buyDate"
}
}
},
{
"$group": {
"_id": "$newArray.buyMonth",
"carCountByMonth": {
"$sum": "$newArray.carCount"
}
}
}
])
这是我的数据:
{
"_id": ObjectId("6213ba90a013b7c5f1232e1f"),
"name": "name1",
"surname": "surname1",
"newArray": {
"buyDate": ISODate("1975-11-04T13:14:15Z"),
"carCount": 3,
"name": "name1",
"surname": "surname1"
}
},
{
"_id": ObjectId("6213ba90a013b7c5f1232e2f"),
"name": "name2",
"surname": "surname2",
"newArray": {
"buyDate": ISODate("1978-12-07T15:30:15Z"),
"carCount": 7,
"name": "name2",
"surname": "surname2"
}
},
{
"_id": ObjectId("6213ba90a013b7c5f1232e3f"),
"name": "name3",
"surname": "surname3",
"newArray": {
"buyDate": ISODate("1983-11-12T18:40:15Z"),
"carCount": 4,
"name": "name3",
"surname": "surname3"
}
}
我想按购买月份计算汽车数量。首先,我想找到所有“newArray”的购买月份,然后添加到所有“newArray”。我的意思是:
{
"_id": ObjectId("6213ba90a013b7c5f1232e1f"),
"name": "name1",
"surname": "surname1",
"newArray": {
"buyDate": ISODate("1975-11-04T13:14:15Z"),
"carCount": 3,
"name": "name1",
"surname": "surname1",
"buyMonth": 11
}
},
{
"_id": ObjectId("6213ba90a013b7c5f1232e2f"),
"name": "name2",
"surname": "surname2",
"newArray": {
"buyDate": ISODate("1978-12-07T15:30:15Z"),
"carCount": 7,
"name": "name2",
"surname": "surname2",
"buyMonth": 12
}
},
{
"_id": ObjectId("6213ba90a013b7c5f1232e3f"),
"name": "name3",
"surname": "surname3",
"newArray": {
"buyDate": ISODate("1983-11-12T18:40:15Z"),
"carCount": 4,
"name": "name3",
"surname": "surname3",
"buyMonth": 11
}
}
最后我会根据他们的购买月份来计算汽车数量。我试过了,但没有得到任何结果:
db.collection.aggregate([
{
$set: {
"newArray.buyMonth": "$buyDate.month"
}
},
{
"$group": {
"_id": "$buyMonth",
"carCountByMonth": {
"$count": "newArray"
}
}
}
])
我怎样才能得到我想要的?提前致谢。
- 要从日期中获取月份,请使用
$month
运算符。 - 要获得
newArray.buyDate
,请使用newArray.buyDate
而不是buyDate
。 $group
newArray.buyMonth
但不是buyMonth
.- 使用
$sum
计算所有newArray.carCount
的总和而不是$count
。
db.collection.aggregate([
{
$set: {
"newArray.buyMonth": {
$month: "$newArray.buyDate"
}
}
},
{
"$group": {
"_id": "$newArray.buyMonth",
"carCountByMonth": {
"$sum": "$newArray.carCount"
}
}
}
])