【发布时间】:2016-12-31 17:43:02
【问题描述】:
我有一组学生,他们有一个名字和一组电子邮件地址。学生文档如下所示:
{
"_id": {"$oid": "56d06bb6d9f75035956fa7ba"},
"name": "John Doe",
"emails": [
{
"label": "private",
"value": "private@johndoe.com"
},
{
"label": "work",
"value": "work@johndoe.com"
}
]
}
电子邮件子文档中的标签设置为每个文档唯一,因此不能有两个具有相同标签的条目。
我的问题是,在更新学生文档时,我想实现以下目标:
- 添加带有新标签的电子邮件只需将带有给定标签和值的新子文档添加到数组中
- 如果添加带有标签的电子邮件,则应将现有的值设置为更新的数据
例如使用以下数据进行更新时:
{
"_id": {"$oid": "56d06bb6d9f75035956fa7ba"},
"emails": [
{
"label": "private",
"value": "me@johndoe.com"
},
{
"label": "school",
"value": "school@johndoe.com"
}
]
}
我希望 emails 数组的结果是:
"emails": [
{
"label": "private",
"value": "me@johndoe.com"
},
{
"label": "work",
"value": "work@johndoe.com"
},
{
"label": "school",
"value": "school@johndoe.com"
}
]
如何在 MongoDB 中实现这一点(可选择使用猫鼬)?这是可能的还是我必须自己在应用程序代码中检查数组?
【问题讨论】:
-
$addToSet 的问题在于它会忽略重复项,并且在使用已存在的标签发布电子邮件值时不会替换现有值。但是,如果标签已经存在,我希望子文档被替换/更新。
-
糟糕,在没有完全阅读问题的情况下就在这里开枪了。是的,你是对的,在这种情况下它不起作用。
-
@chridam 没问题。还有其他想法吗?
标签: arrays mongodb mongoose updates