MongooseJS – 限制文档在子文档中的数量

我想知道是否有办法限制(子)文档中元素的数量。 在我的应用程序中,可以使用ajax将元素添加到子文档中,所以防止恶意用户添加可笑数量的条目非常重要。

我可以想到一种方法,那就是查询父文档,检查子文档中元素的个数,如果小于X,保存它。 然而,这需要查询整个文件,只是为了更新一点点的东西。 我宁愿更喜欢用update()而不是findOne()和save()来做所有事情。 有没有办法?

编辑:它可以完成之前没有数据库查找更新。 我不知道是否可以做一个subdoc,我做了一个普通的对象。 简单地将数据存储在一个数组中,或者更好地存储一个经典对象 然后在更新之前validation密钥号码,如果密钥号码大于允许的 – 忽略它。 Ofc如果处理一个对象,首先检查这个键是否是一个数字。

您可以在Mongoose中使用自定义validate函数来限制数组,例如:

 validate: [v => v.length <= MAX, 'message'] 

其中MAX是最大数量的元素, 'message'是在validation失败时显示的消息。 看到:

http://mongoosejs.com/docs/api.html#schematype_SchemaType-validate

但是如果数组太长,你不能对MongoDB进行一次请求,因为MongoDB没有模式的概念,并且需要做你想做的事情。 模式只存在于mongoose中。

所以,如果你想直接使用MongoDB,那么你不但不能在一个请求中执行它,而且实际上比这更糟 – 你也不能消除竞争条件,因为MongoDB不支持事务,所以你不能保证你的限制永远不会超过。