将包含ISODATE数组的MongoDB文档转换为字符串
我有这种形式的MongoDB文档,其中“疫苗接种”是一系列ISODates:将包含ISODATE数组的MongoDB文档转换为字符串,mongodb,aggregation-framework,bson,isodate,Mongodb,Aggregation Framework,Bson,Isodate,我有这种形式的MongoDB文档,其中“疫苗接种”是一系列ISODates: { "vacNo" : 1, "claimantDetails" : { "forename" : "Fry", "surname" : "Gordon", "dateOfBirth" : ISODate("2000-12-31T00:00:00Z") },
{
"vacNo" : 1,
"claimantDetails" : {
"forename" : "Fry",
"surname" : "Gordon",
"dateOfBirth" : ISODate("2000-12-31T00:00:00Z")
},
"vaccinations" : [
{
"dateOfVaccination" : ISODate("2010-12-31T00:00:00Z"),
"Type" : "MMR"
},
{
"dateOfVaccination" : ISODate("2015-01-31T00:00:00Z"),
"Type" : "Flu"
}
]
}
我需要将所有ISODATE转换为字符串,包括“疫苗接种”数组中的ISODATE(保持其他字段不变),如下所示:
{
"vacNo" : 1,
"claimantDetails" : {
"forename" : "Fry",
"surname" : "Gordon",
"dateOfBirth" : "2000-12-31"
},
"vaccinations" : [
{
"dateOfVaccination" : "2010-12-31",
"Type" : "MMR"
},
{
"dateOfVaccination" : "2015-01-31",
"Type" : "Flu"
}
]
}
我可以使用$dateToString,但只能在不属于数组的字段上使用,例如:
db.claimTest.aggregate([{$project:{ _id:0,
"vacNo":1,
"claimantDetails.forename":1,
"claimantDetails.surname":1,
"claimantDetails.dateOfBirth":{ $dateToString:{format:"%Y-%m-%d", date:"$claimantDetails.dateOfBirth"}}}}]);
它将“ClaimentDetails.dateOfBirth”转换为字符串,但我无法转换任何“DateOfVenturement”字段,因为它们是“Ventures”BSON数组的一部分
是否有任何建议/解决方案可以帮助将ISODate文档转换为所需文档?谢谢您可以使用
$map
修改数组的每个元素。在和的帮助下,以下是解决方案之一
db.claimTest.aggregate([{
$project: {
_id: 0,
"vacNo": 1,
"claimantDetails.forename": 1,
"claimantDetails.surname": 1,
"claimantDetails.dateOfBirth":{ $dateToString:{format:"%Y-%m-%d", date:"$claimantDetails.dateOfBirth"}},
"vaccinations": {
$map: {
input: "$vaccinations",
as: "v",
in: {
$mergeObjects: [
'$$v',
{
dateOfVaccination: {
$dateToString: {
format: "%Y-%m-%d",
date: "$$v.dateOfVaccination"
}
}
}
]
}
}
}
}
}]);
编辑:已更正的输出
希望这有帮助 感谢您使用$map和$mergeObjectsWellcome to StackOverflow@Mustaq完成了完美的工作。请随意更新他的答案,并检查其是否正确,以便其他人可以找到这一点