为什么查询中的条件不匹配时会导致数据被删除?

3
我在MongoDB中有这个架构。
const movieSchema = new mongoose.Schema({
    title: String,
    year: Number,
    score: Number,
    rating: String
})

当我试图删除年份大于1999的集合时,我错误地设置了条件为:

 Movie.deleteMany({yeaer: {$gte: 1999}}).then(res => {console.log(res)})

这种情况发生了 This happened

结果我的所有数据都被删除了 Before and after deletion


像@Christian所说的那样保护自己,但你在查询中拼错了年份(yeaer)。 - Rilla
是的,实际上我的问题是,为什么当我传递一个错误的查询而且没有匹配记录时,它删除了所有内容。 - ash54321
哇!删除所有东西真的很可怕!在pymongo中,我尝试使用您相同的非匹配过滤器对玩具集合进行delete_many,幸运的是它返回了deleted_count0,并且我验证了集合完全保持不变。太好了! - rickhg12hs
1个回答

3
如果从deleteMany()中省略条件属性,mongoose将删除该模型中的所有文档。如果拼写条件错误,则情况也是如此。这是一种相当危险的默认行为,但您可以通过禁用mongoose中的严格查询模式来保护自己:
mongoose.set('strictQuery', false)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接