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

时间:2016-02-10 18:25:22

标签: mongodb document

我很好奇是否可以在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,看起来这样的1对多关系在嵌入式文档中是最好的,除非嵌入式文档继续增长。然后,在那时,似乎引用旧密码最好在其自己的文档中提供。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

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

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

这应该保留你阵列上的最后10个密码。

相关问题