按id数组删除整个对象



我有一个包含元数据的对象数组,看起来与此类似。

数据:

metadata:[ 
{ matchid: '1', region: 'europe' }, 
{ matchid: '2', region: 'africa' },
{ matchid: '3', region: 'asia' },
]

我有一个端点设置来接收IDS['1', '2']数组,它将删除包含这些IDS的所有对象。

这是我当前的查询:

查询删除对象

xx.findByIdAndUpdate(
id,
$pullAll: {
"metadata.matchid": {
$in: req.body.matches
}
}
)

我希望id为1和2的两个对象都被删除

预期结果:

metadata:[ 
{ matchid: '3', region: 'asia' },
]

我收到一个错误,我从来没有见过它是一个对象,说codeName: "BadValue">

正如文档所说:

$pullAll操作符从现有数组中删除指定值的所有实例。不像$pull操作符通过指定查询来删除元素。

$pullAll要求和精确匹配,而$pull喜欢使用过滤器。所以你可以这样使用$pull

yourModel.findByIdAndUpdate(
id,
$pull: {
metadata:{
matchid: { $in: req.body.matches}
}
}
)

例子