javascript - mongodb 从多个文档中删除特定的数组项(nodejs)
问题描述
我正在尝试从多个文档中删除特定的数组项。假设我们有以下文件:
{
_id: ...,
email: 'person1@email.com',
tasks: [
{ title: 'some titleA', uuid: 'uuidA'},
{ title: 'some titleB', uuid: 'uuidB'},
{ title: 'some titleC', uuid: 'uuidC'},
]
},
{
_id: ...,
email: 'person2@email.com',
tasks: [
{ title: 'some titleA', uuid: 'uuidA'},
{ title: 'some titleB', uuid: 'uuidB'},
{ title: 'some titleC', uuid: 'uuidC'},
]
},
{
_id: ...,
email: 'person3@email.com',
tasks: [
{ title: 'some titleA', uuid: 'uuidA'},
{ title: 'some titleB', uuid: 'uuidB'},
{ title: 'some titleC', uuid: 'uuidC'},
]
}
然后,给定一个电子邮件列表,说person1@email.com
并person2@email.com
从与这些电子邮件匹配的任何文档的 数组中删除value 为tasks
的数组项。uuid
uuidB
结果应该是
{
_id: ...,
email: 'person1@email.com',
tasks: [
{ title: 'some titleA', uuid: 'uuidA'},
{ title: 'some titleC', uuid: 'uuidC'},
]
},
{
_id: ...,
email: 'person2@email.com',
tasks: [
{ title: 'some titleA', uuid: 'uuidA'},
{ title: 'some titleC', uuid: 'uuidC'},
]
},
{
_id: ...,
email: 'person3@email.com',
tasks: [
{ title: 'some titleA', uuid: 'uuidA'},
{ title: 'some titleB', uuid: 'uuidB'},
{ title: 'some titleC', uuid: 'uuidC'},
]
}
这是我到目前为止所尝试的:
var emails = ['person1@email.com', 'person2@email.com']
model.updateMany({
email: { $in: emails },
}, {
$pull: {
tasks: {
$elemMatch: { uuid: uuid }
}
}
})
谢谢您的帮助!
解决方案
$elemMatch
是query
andprojection
运算符而不是update operator
. 因此你不能在这里使用它。
您需要使用“绝对”对象结构
model.updateMany(
{ "email": { "$in": emails }},
{ "$pull": { "tasks": { "uuid": uuid }}}
)
推荐阅读
- amazon-web-services - 有没有办法仅在我收到推理请求时打开 SageMaker 模型端点
- flutter - Flutter:找不到 String.xml 文件
- c - (简而言之)它是如何工作的?
- ruby-on-rails - 如何绕过 validates_email_format_of 验证以保存 nil 电子邮件值?
- javascript - 无法向自己发出 POST 请求
- c++ - c++ 字符串中的字符被忽略
- docker - Azure 容器注册表是多区域的吗?
- python - 通过右键单击 UI 在 Maya 中运行脚本?
- audiokit - AKMIDICallbackInstrument 处理超过 16 个通道
- javascript - 在图像的特定位置绘制黑点