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不支持事务,所以你不能保证你的限制永远不会超过。
- postgresql pg.Pool连接池凭证的安全性
- CouchbaseError:在套接字上收到的数据不是预期的格式 – couchbase?
- 如何在DynamoDB中创buildUUID?
- Sequelize findOrCreate给我一个SequelizeUniqueConstraintError:validation错误
- Nodejs:将大量行批量插入到数据库中
- 我怎样才能将(concat)两列合并到RethinkDB中
- 在MYSQL查询中使用Javascriptvariables
- socket.io中的实时状态更新应用程序,无法将状态发送到数据库(mysql)
- 用knex.js插入嵌套logging