我在更新 MongoDB 4 中的嵌套对象时遇到问题。
我写了一个操场,我正在做一些测试以解决问题..
我的愿望是:
我需要用小写字母覆盖“email”项目(获得的结果)。
我需要在“emailsStatus”数组中包含的所有 N 个对象中,“emailAddress”项被自身覆盖,但为小写
我不能执行第二点,在操场上你会发现一切都准备好了,我正在执行的测试但我没有成功..我错了什么?
答案 0 :(得分:1)
$map
迭代emailsStatus
数组的循环并转换emailAddress
小写,使用$mergeObjects
将当前对象与更新电子邮件字段合并,email
is $type
来检查 string
的单个条件db.collection.update(
{ email: { $type: "string } },
[{
$set: {
email: { $toLower: "$email" },
emailsStatus: {
$map: {
input: "$emailsStatus",
in: {
$mergeObjects: [
"$$this",
{ emailAddress: { $toLower: "$$this.emailAddress" } }
]
}
}
}
}
}],
{ multi: true }
)
使用emailAddress
和$cond
检查$type
数组中的空条件,
$map: {
input: "$emailsStatus",
in: {
$mergeObjects: [
"$$this",
{
emailAddress: {
$cond: [
{ $eq: [{ $type: "$$this.emailAddress" }, "string"] },
{ $toLower: "$$this.emailAddress" },
"$$this.emailAddress"
]
}
}
]
}
}