如何映射和合并数组的数组的对象
how to map and mergeObjects of an array of an array
我想应用 mergeObjects 和数组的数组映射:
当我是Array in的一级时,我能够完成映射和合并,但是如果Array有另一个数组,我不确定如何应用另一个map/merge对象。
{
_id: "123",
date: "1900-01-01T11:00:00.0000000",
name: "joe",
birthdayservice: [
{
"date": "1999-01-01",
"team" : [
{
"requestedDate": "1999-01-01"
},
{
"requestedDate": "1999-05-01"
}
},
{
"date": "1998-01-01",
"team" : [
{
"requestedDate": "1999-01-01"
},
{
"requestedDate": "1999-05-01"
}
}
]
}
我能够通过 birthdayservice 中的第一个数组进行映射,将日期转换为 ISO_Date/todate,例如:
{
"$addFields": {
"birthdayservice": {
$map: {
input: "$birthdayservice", //this is an array
in: {
"$mergeObjects": [
"$$this",
{
"date": {
"$toDate": "$$this.date"
}
}
]}
}
}
}
}
但是当我进入更多的嵌套值时,我得到
$mergeObjects requires object inputs, but input is an array
{
"$addFields": {
"birthdayservice": {
$map: {
input: "$birthdayservice", //this is an array
in: {
"$mergeObjects": [
"$$this",
{
"date": {
"$toDate": "$$this.date"
}
}
]}
}
}
}
},
{
"$addFields": {
"birthdayservice": {
$map: {
input: "$birthdayservice.team", //also an array
in: {
"$mergeObjects": [
"$$this",
{
"requestedDate": {
"$toDate": "$$this.requestedDate"
}
}
]}
}
}
}
}
我的最终目标是将日期字符串字段重新设置为日期转换
birthdayservice.date
birthdayservice.team.requestedDate
两者都 ISO_Dates 如下:
{
_id: "123",
date: "1900-01-01T11:00:00.0000000",
name: "joe",
birthdayservice: [
{
"date": ISO_Date("1999-01-01T11:00:00.0000000Z"),
"team" : [
{
"requestedDate": ISO_Date("1999-01-01T11:00:00.0000000Z")
},
{
"requestedDate": ISO_Date("1999-05-01T11:00:00.0000000Z")
}
},
{
"date": "1998-01-01",
"team" : [
{
"requestedDate": ISO_Date("1999-01-01T11:00:00.0000000Z")
},
{
"requestedDate": ISO_Date("1999-05-01T11:00:00.0000000Z")
}
}
]
}
查询
- 这会将所有日期字符串转换为
birthdayservice
和 teams
数组中的日期
- 地图
birthdayservice
- 转换
"date"
- 嵌套映射以转换
team
中的日期
- 字段更改值的方式是
mergeObjects
(在 mongodb5 中我们也有 setField
来做这个)
aggregate(
[{"$set":
{"birthdayservice":
{"$map":
{"input":"$birthdayservice",
"in":
{"$mergeObjects":
["$$bs",
{"date":{"$toDate":"$$bs.date"},
"team":
{"$map":
{"input":"$$bs.team",
"in":
{"$mergeObjects":
["$$t", {"requestedDate":
{"$toDate":"$$t.requestedDate"}}]},
"as":"t"}}}]},
"as":"bs"}}}}])
我想应用 mergeObjects 和数组的数组映射:
当我是Array in的一级时,我能够完成映射和合并,但是如果Array有另一个数组,我不确定如何应用另一个map/merge对象。
{
_id: "123",
date: "1900-01-01T11:00:00.0000000",
name: "joe",
birthdayservice: [
{
"date": "1999-01-01",
"team" : [
{
"requestedDate": "1999-01-01"
},
{
"requestedDate": "1999-05-01"
}
},
{
"date": "1998-01-01",
"team" : [
{
"requestedDate": "1999-01-01"
},
{
"requestedDate": "1999-05-01"
}
}
]
}
我能够通过 birthdayservice 中的第一个数组进行映射,将日期转换为 ISO_Date/todate,例如:
{
"$addFields": {
"birthdayservice": {
$map: {
input: "$birthdayservice", //this is an array
in: {
"$mergeObjects": [
"$$this",
{
"date": {
"$toDate": "$$this.date"
}
}
]}
}
}
}
}
但是当我进入更多的嵌套值时,我得到
$mergeObjects requires object inputs, but input is an array
{
"$addFields": {
"birthdayservice": {
$map: {
input: "$birthdayservice", //this is an array
in: {
"$mergeObjects": [
"$$this",
{
"date": {
"$toDate": "$$this.date"
}
}
]}
}
}
}
},
{
"$addFields": {
"birthdayservice": {
$map: {
input: "$birthdayservice.team", //also an array
in: {
"$mergeObjects": [
"$$this",
{
"requestedDate": {
"$toDate": "$$this.requestedDate"
}
}
]}
}
}
}
}
我的最终目标是将日期字符串字段重新设置为日期转换
birthdayservice.date birthdayservice.team.requestedDate
两者都 ISO_Dates 如下:
{
_id: "123",
date: "1900-01-01T11:00:00.0000000",
name: "joe",
birthdayservice: [
{
"date": ISO_Date("1999-01-01T11:00:00.0000000Z"),
"team" : [
{
"requestedDate": ISO_Date("1999-01-01T11:00:00.0000000Z")
},
{
"requestedDate": ISO_Date("1999-05-01T11:00:00.0000000Z")
}
},
{
"date": "1998-01-01",
"team" : [
{
"requestedDate": ISO_Date("1999-01-01T11:00:00.0000000Z")
},
{
"requestedDate": ISO_Date("1999-05-01T11:00:00.0000000Z")
}
}
]
}
查询
- 这会将所有日期字符串转换为
birthdayservice
和teams
数组中的日期 - 地图
birthdayservice
- 转换
"date"
- 嵌套映射以转换
team
中的日期
- 字段更改值的方式是
mergeObjects
(在 mongodb5 中我们也有setField
来做这个)
aggregate(
[{"$set":
{"birthdayservice":
{"$map":
{"input":"$birthdayservice",
"in":
{"$mergeObjects":
["$$bs",
{"date":{"$toDate":"$$bs.date"},
"team":
{"$map":
{"input":"$$bs.team",
"in":
{"$mergeObjects":
["$$t", {"requestedDate":
{"$toDate":"$$t.requestedDate"}}]},
"as":"t"}}}]},
"as":"bs"}}}}])