限制嵌入式 Mongo 文档的文档插入

Limit Document Insertion for Embedded Mongo Document

我很好奇是否可以 create/enforce 对 mongoDB 文档进行一些限制。我想将 MongoDB 嵌入式文档限制为一定数量的记录 (10)。我正在创建一个密码检查系统,它将查询 Mongo 并检查用户的密码是否 a) 像他们当前的密码,或者 b) 匹配他们最旧的 10 个密码之一。如果不匹配,则数据库将更新为最新密码,旧密码文档将更新为最新密码。但是,我想将其限制为 10 条记录,并覆盖最旧的记录,以便在 oldPassword 文档中只有 10 个密码。

这有意义吗?是否有可能强制执行这样的限制?模拟对象如下所示:

_id: "",
username: "User",
currentPassword: "pass"
oldPasswords:{
    password1: "pass1",
    password2: "pass2",
    password3: "pass3",
    password4: "pass4",
    password5: "pass5",
    password6: "pass6",
    password7: "pass7",
    password8: "pass8",
    password9: "pass9",
    }

作为侧边栏:这是处理 Mongo 中密码的最佳方式吗?我已经阅读了他们的 modeling documents 并且看起来像这样的一对多关系在嵌入式文档中最好,除非嵌入式文档继续增长。然后,在这一点上,似乎最好在其自己的文档中引用旧密码。

如有任何帮助,我们将不胜感激!

如果可以将旧密码转换为数组而不是对象,则可以使用 slice

db.passwords.update(
   { _id: 1 },
   {
     $push: {
        oldpasswords: {
           $each: ["passabc"],
           $slice: -10
        }
     }
   }
)

这应该会在您的数组中保留最后 10 个密码。