MongoDB 中 deleteMany()和 Remove()的区别

Shihab Sikder 2023年1月30日
  1. MongoDB 中 deleteMany() 的参数和返回
  2. MongoDB 中 remove() 的参数和返回
MongoDB 中 deleteMany()和 Remove()的区别

deleteMany()remove() 都用于从 MongoDB 中删除条目。在最近的版本中,remove 被标记为已弃用。

相反,MongoDB 建议使用 deleteManydeleteOne。命令 deleteMany 可以在删除之前接受要匹配的参数。

MongoDB 中 deleteMany() 的参数和返回

这个方法来自 mongosh。一般用于集合中删除任何特定集合下的文档。

这是它的使用方法。

db.collection.deleteMany(
    <FILTER>,{
        writeConcern: <document>,
        collation: <document>
    }
)

<FILTER> 表示我们可以使用我们的自定义搜索字段。假设我们要删除价格等于 30 的所有产品。

然后代码将是:

db.collection.deleteMany({
    price:30
})

我们可以在这里将其他参数留空。如果要删除整个集合,请将 {} 插入 deleteMany

这里有更多关于 writeConcerncollation 的信息。

参数 类型 说明
writeConcern 文档 它是一个可选参数。它对文档进行确认。要了解有关 writeConcern 的更多信息,请访问此博客
collation 文档 它允许用户对文档使用特定于语言的规则。排序规则是一个可选参数。如果你使用它,你需要使用 local 字段。这里有更多关于 collation

如果函数使用 writeConcern 参数运行,deleteMany() 会将 acknowledged 返回为 true;否则,。它还返回 deleteCount,表示删除了多少文档。

deleteMany 删除所有匹配过滤器的文档。

示例退货可能如下所示。

{ "acknowledged" : true, "deletedCount" : 9 }

MongoDB 中 remove() 的参数和返回

remove() 方法有两个功能。它也可以充当 deleteManydeleteOne

remove() 的模板代码在这里。

db.collection.remove(
   <query>,
   <justOne>
)

一般使用这两个参数。此外,你可以将其扩展到以下内容。

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>,
     collation: <document>
   }
)

writeConcerncollation 与我们上面讨论的 deleteMany() 相同。在这里,我们可以使用 query 代替过滤器。

要了解有关 MongoDB 中的 query 的更多信息,你可以访问以下 link

如果我们在 remove 方法中传递一个空对象,它将从集合中删除所有文档。例如,假设你有一个 product 集合,并且想要删除价格低于 5 的所有产品。

然后命令将是:

db.products.remove(
    {price:{ $lt: 5}}
)

如果我们输入这个命令,justOne 参数将默认为 false。现在,如果你只想删除同一查询的一个元素,命令将如下所示。

db.products.remove(
    {price:{ $lt: 5}}, true
)

此方法返回一个名为 WriteResult 的对象,该对象具有以下参数。

WriteResult({ "nRemoved" : 10 })

它也有 writeErrorwriteConcern;这些与上面的 writeConcern 有关。

remove() 在更高版本的 MongoDB 中已被弃用。因此,在开发 NodeJS 应用程序时,你应该只使用 deleteOnedeleteMany

要了解有关 remove() 的更多信息,请访问以下网站

作者: Shihab Sikder
Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website

相关文章 - MongoDB Delete