【问题标题】:Remove entire objects by array of ids通过 id 数组删除整个对象
【发布时间】:2021-08-10 04:39:09
【问题描述】:

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

数据:

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 仅删除数组中与您给出的指定值完全匹配的元素,包括顺序。它以空操作数表达式 ( { } ) 开头。所以,也许像这样查询:xx.findByIdAndUpdate(id, { $pullAll: { "metadata.matchid": [{ $in: req.body.matches }], }, });.

标签: mongodb mongoose


【解决方案1】:

正如documentation 所说:

$pullAll 运算符从现有数组中删除指定值的所有实例。与 $pull 运算符不同,后者通过指定查询来删除元素。

$pullAll 要求完全匹配,$pull 就像使用过滤器一样。所以你可以这样使用$pull

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

例如here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2014-02-08
    相关资源
    最近更新 更多