2016-02-10 119 views
1

我很好奇如果我可以在mongoDB文档上创建/强制执行一些限制。我想限制MongoDB嵌入式文档到一定数量的记录(10)。我正在创建一个密码检查系统,该系统将查询Mongo并检查用户的密码是否为a)当前密码,或者b)匹配其10个最早的密码之一。如果没有匹配,则数据库将使用最新密码进行更新,旧密码文档将使用最新的当前密码进行更新。但是,我想将其限制为10条记录,并且覆盖最旧的记录,因此oldPassword文档中只有10个密码。嵌入式Mongo文档插入限制文档

这是否有意义?是否有可能实施这样的限制?模拟对象如下所示:

_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,看来像这样的一对多关系在嵌入式文档中是最好的,除非嵌入式文档继续增长。那么,在那个时候,似乎引用旧密码最好在它自己的文档中提供。

任何帮助将不胜感激!

回答

0

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

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

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

+0

这是仅限于数组吗?作为具有关键值对的对象,有没有办法保持上面提到的格式?我想我也可以对数组做同样的事情。 –

+0

我相信它仅限于数组。 –