【发布时间】:2021-04-06 15:28:24
【问题描述】:
我有一个 mongodb 集合,其中包含一些数组值,例如 ActivityType、Note 和 ActivityDate。数组名称称为活动。我需要重命名一些字段,所以我使用了聚合和 $project 来重命名输出的一些列。但是我只需要为数组值返回最新插入的 ActivityDate。
我当前的查询返回Activity数组中的所有数组值:
db.test.aggregate([
{$match: {}
}, {$unwind: "$activities"},
{$match: {}},
{ "$project": {
"_id" : 0,
"Project Number": "$ProjectNumber" ,
"Activity Type": "$activities.activityTypeDesc" ,
"Date of Activity": {
"$dateToString": { "format": "%Y-%m-%d", "date": "$activities.dateOfActivity" }
}
}}
])
这有点像在 sql server 中获得前 1 个订单。我如何在 Mongodb 中做到这一点?经过一番阅读,我似乎需要使用 $sort 和 $group,但我不知道如何适应这里。
我在下面有一些示例数据:
{
"_id" : ObjectId("5fd289a93f7cf02c36837ca7"),
"ProjectNumber" : "ABC1234567",
"activities" : [
{
"activityTypeDesc" : "Type1",
"dateOfActivity" : ISODate("2021-02-20T06:00:00.000Z"),
"activityNote" : ""
},
{
"activityTypeDesc" : "Type2",
"dateOfActivity" : ISODate("2021-03-04T06:00:00.000Z"),
"activityNote" : ""
},
{
"activityTypeDesc" : "Type3",
"dateOfActivity" : ISODate("2021-01-04T06:00:00.000Z"),
"activityNote" : ""
},
{
"activityTypeDesc" : "Type4",
"dateOfActivity" : ISODate("2021-04-15T05:00:00.000Z"),
"activityNote" : ""
}
]
}
{
"_id" : ObjectId("5fd2ca65d1a01d157c0179be"),
"ProjectNumber" : "12345",
"activities" : []
}
查询的结果应该返回两行,一行是最新的activitydate,另一行是没有activitydate(因为没有数组值) 任何帮助将不胜感激!
【问题讨论】:
-
您的具体要求是什么,您想从数组中获取最新元素还是只需要重命名字段名称?
-
我两者都需要。我需要获取所有具有最新活动日期的数组元素,但我还需要将列重命名为其他内容。
-
好的,你将如何确定哪个元素的活动日期最近?
-
我在文档中有一个数组,如下所示: "activities" : [ { "activityTypeDesc" : "Type1", "dateOfActivity" : ISODate("2021-02-20T06:00:00.000Z "), "activityNote" : "" }, { "activityTypeDesc" : "Type2", "dateOfActivity" : ISODate("2021-03-04T06:00:00.000Z"), "activityNote" : "" } ]。所以我只需要按 dateOfActivity 顺序获取最新的一组数组值。但在数组之外,我还有其他字段需要重命名。
标签: mongodb mongodb-query