【问题标题】:How to delete documents in mongodb when a number of document limit exided超过文档数量限制时如何删除mongodb中的文档
【发布时间】:2022-10-17 00:07:30
【问题描述】:

我使用 docker 在本地环境中运行 MongoDB 副本集。

我正在使用 nodejs 通过使用官方 mongodb 驱动程序(不是 mongoose)

所以我想要的是当集合中存在限制时,我想删除添加到集合中的其他文档并保持该限制中的文档数量

假设我有一个名为订单的集合。我的上限是 10.

警告订单只是一个集合名称,我没有在该集合中存储订单,或者我的应用程序与此无关。只是一个随机的名字

因此 nodejs 应用程序会将文档添加到订单集合中。在将文档添加到 mongodb 时我的限制已经超出。

这意味着订单集合中的文档数等于 10。我希望 nodejs 停止将文档添加到 mongodb

我该怎么做。

(1) 我可以在 MongoDB 中创建一个索引来做到这一点吗

(2)或者我应该在nodejs应用程序中做

任何人都可以分享他们关于如何做到这一点的想法。我没有任何代码可以分享 你因为我还没有分配

【问题讨论】:

  • 在 nodejs 本身中执行此操作。插入前获取集合的文档计数,如果大于或等于限制,则忽略插入。

标签: node.js mongodb mongodb-query


【解决方案1】:

选项1:

您可以使用 mongoDB 提供的内置功能,称为: "Capped collection"

例子:

 db.createCollection("orders", { capped : true, size : 171798691840, max : 10 } )

解释: 您将上限集合的最大限制设置为 10 个文档,大小为 171798691840 ( 10x 16MB ) ,这样当您插入 11 号文档时,将删除 1 号文档等一个,这样它就可以使您的集合始终包含 10 个文档.

选项 2:

正如@Charchit Kapoor 所建议的,您可以在插入/更新查询执行之前从应用程序检查文档 count() 以编程方式模拟行为。

选项 3:

如果您使用的是 ATLAS(mongoDB SaaS),则可以选择设置 trigger

选项 4:

另一个选项是从应用程序中,您可以在插入最后一个文档后将集合设置为只读,这样每次用户尝试写入之后都会收到授权异常。

附: 顺便说一句,设置这样的限制看起来有点奇怪,如果您提供有关您的特定用例的更多详细信息以及您为什么喜欢这样做,也许我们可能会考虑一些更好的设计选项......?

【讨论】:

  • 我们可以在添加新文档时创建一个上限集合以不删除第一个文档。因为我不会删除文件。如果集合中的限制是 10 个文档,则可以有 10 个文档。没有删除或没有添加我可以做到。
  • 不幸的是,没有从数据库中执行此操作的本地方法,用其他可能的选项更新了我的答案......
【解决方案2】:

当 mongodb 达到限制时,我设法删除集合中的文档

为此,我创建了 nodejs 进程来完成这项工作

Documented in my GitHub page

我希望这会有所帮助,这是我的第一个 git repo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多