我很好奇是否可以在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对多关系在嵌入式文档中是最好的,除非嵌入式文档继续增长。然后,在那时,似乎引用旧密码最好在其自己的文档中提供。
非常感谢任何帮助!
答案 0 :(得分:0)
如果您可以将旧密码切换为数组而不是对象,则可以使用slice。
db.passwords.update(
{ _id: 1 },
{
$push: {
oldpasswords: {
$each: ["passabc"],
$slice: -10
}
}
}
)
这应该保留你阵列上的最后10个密码。