我想知道是否有办法限制(子)文档中的元素数量。在我的应用程序中,可以使用ajax将元素添加到子文档中,因此我必须防止恶意用户添加大量条目。
我可以想到一种方法,即查询父文档,检查子文档中的元素数量,如果小于X,则保存它。然而,这需要查询整个文档,只是为了更新一点。我宁愿更喜欢使用update(),而不是findOne()和save()。有办法吗?
编辑:在更新之前无需数据库查找即可完成。我不知道是否可以使用一个subdoc,我用一个普通的对象做了。只需将数据存储在数组中或更好地存储为经典对象。然后在更新之前,验证密钥号码,如果密钥号码大于允许值 - 忽略它。如果处理对象,请先检查密钥是否为数字。
答案 0 :(得分:2)
您可以使用自定义validate
函数在Mongoose中创建数组限制,例如:
validate: [v => v.length <= MAX, 'message']
其中MAX
是最大数量的元素,'message'
是验证失败时显示的消息。参见:
http://mongoosejs.com/docs/api.html#schematype_SchemaType-validate
但是如果数组太长,你就不能对MongoDB提出一个失败的请求,因为MongoDB没有模式的概念,而且需要做你想做的事情。模式仅存在于Mongoose中。
因此,如果你想直接使用MongoDB,那么不仅你不能在一个请求中执行它,它实际上要比这更糟糕 - 你也无法消除竞争条件,因为MongoDB不支持事务,所以你不能保证永远不会超过你的限制。