gpt4 book ai didi

mongodb - 使用聚合框架按子文档字段分组

转载 作者:IT老高 更新时间:2023-10-28 13:24:58 26 4
gpt4 key购买 nike

结构如下:

{
"_id" : "79f00e2f-5ff6-42e9-a341-3d50410168de",
"bookings" : [
{
"name" : "name1",
"email" : "george_bush@gov.us",
"startDate" : ISODate("2013-12-31T22:00:00Z"),
"endDate" : ISODate("2014-01-09T22:00:00Z")
},
{
"name" : "name2",
"email" : "george_bush@gov.us",
"startDate" : ISODate("2014-01-19T22:00:00Z"),
"endDate" : ISODate("2014-01-24T22:00:00Z")
}
],
"name" : "Hotel0",
"price" : 0,
"rating" : 2
}

现在,我想生成一份报告,告诉我进行了多少预订,按预订月份分组(假设只有预订开始日期很重要),还按酒店评级分组。

我希望答案是这样的:

{
{
rating: 0,
counts: {
month1: 10,
month2: 20,
...
month12: 7
}
}
{
rating: 1,
counts: {
month1: 5,
month2: 8,
...
month12: 9
}
}
...
{
rating: 6,
counts: {
month1: 22,
month2: 23,
...
month12: 24
}
}
}

我用聚合框架试过这个,但我有点卡住了。

最佳答案

以下查询:

db.book.aggregate([
{ $unwind: '$bookings' },
{ $project: { bookings: 1, rating: 1, month: { $month: '$bookings.startDate' } } },
{ $group: { _id: { rating: '$rating', month: '$month' }, count: { $sum: 1 } } }
]);

将为您提供每个评级/月的结果,但它不会在几个月内制作子文档。通常,您无法将值(例如月份 nr)转换为键(例如月份 1)——不过,您可以在应用程序中轻松处理这一点。

以上聚合结果:

"result" : [
{
"_id" : {
"rating" : 2,
"month" : 1
},
"count" : 1
},
{
"_id" : {
"rating" : 2,
"month" : 12
},
"count" : 1
}
],
"ok" : 1

关于mongodb - 使用聚合框架按子文档字段分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21025446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com