mongodb - 如何在给定条件下聚合一天中的匹配记录,其中日期和计数值存储在数组中
问题描述
我正在尝试查询 mongo 集合以获取匹配条件“状态”的结果:每个日期的新结果并将结果推送到数组。
I have tried the below query, but it is not grouping by date as expected. Please help.
试过这个:
db.collection.aggregate([ { $match: { status: "New" } }, { $sort: { date: 1 } }, { $group: { _id: { status: "$status" }, series: { $push: { name: "$Date", value: { $sum: 1 } } } } }, { $addFields: { name: "$_id.status" } } ])
样品采集和预期结果:
**Sample Collection:**
[ { "_id": "abcd123", "Date": "2018-06-08T09:42:36.000Z", "status": "New", }, { "_id": "abcd124", "Date": "2018-06-09T09:42:36.000Z", "status": "New" }, { "_id": "abcd125", "Date": "2018-06-09T09:31:44.000Z", "status": "New" }, { "_id": "abcd126", "Date": "2018-06-10T09:42:43Z", "status": "New" }, ]
**Expected Result:**
[ {“_id”:{“状态”:“新”},“名称”:“新”,“系列”:[ {“名称”:“2018-06-08T09:42:52Z”,“价值”: 1},{“名称”:“2018-06-09T09:42:58Z”,“价值”:2},{“名称”:“2018-06-10T09:42:43Z”,“价值”:1} , ] } ]
解决方案
@matthPen 早些时候回答了这个问题。此处:如何在给定条件下聚合每个不同记录的总和并在 mongodb 中的数组中获取结果
我只需要在他的答案中添加“addFields”。我在这里问之前没有检查他的答案是我的错误。
db.collection.aggregate([
{
$match: {
status: "New"
}
},
{
$group: {
_id: "$Date",
value: {
$sum: 1
}
}
},
{
$group: {
_id: null,
series: {
$push: {
name: "$_id",
value: "$value"
}
}
}
},
{
$addFields: {
name: "New"
}
},
])
可能会帮助寻找类似查询的人
推荐阅读
- javascript - 重置缩放:仅更新平移?
- django - 使 usertype users 变得简单
- php - 使用 ssh2_connect 命令时的“localhost 当前无法处理此请求”
- clojure - Conditionally rename keys in a list and convert into a map?
- c++ - 为什么 time() 没有正确更新我的自定义时间?
- postgresql - Google Cloud SQL:如何使用 PostGIS 启用 GDAL 驱动程序?
- linux - 如何在shell脚本命令中动态传递参数?
- python - 如何打印 BeautifulSoup 收集的数据?
- ms-access - 如何根据其他数据的组合对数据进行平均?
- python - 无法使用从 keras 保存的模型将在线预测服务与图像输入一起使用