【问题标题】:MongooseJS - limit number of documents in subdocumentMongooseJS - 限制子文档中的文档数量
【发布时间】:2017-08-12 02:47:10
【问题描述】:

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

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

编辑:在更新之前无需数据库查找即可完成。我不知道是否可以使用 subdoc,我使用普通对象进行了操作。只需将数据存储在数组中,或者更好地存储在经典对象中。然后在更新之前验证密钥号,如果密钥号大于允许的 - 忽略它。 Ofc如果处理一个对象,首先检查key是否为数字。

【问题讨论】:

    标签: javascript node.js mongodb mongoose database


    【解决方案1】:

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

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

    其中MAX 是元素的最大数量,'message' 是验证失败时显示的消息。见:

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

    但是,如果数组太长,您不能对 MongoDB 发出一个会失败的请求,因为 MongoDB 没有模式的概念,而您需要这样做。 Schema 仅存在于 Mongoose 中。

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

    【讨论】:

    • 我完全不明白。假设我有一个子架构 childSchema 并且父架构就像 { someVariable: String, child: { type: [childSchema], validate: { ... } } } 那样工作吗?
    猜你喜欢
    • 2020-06-30
    • 2021-03-08
    • 2014-09-20
    • 2014-10-25
    • 2012-12-07
    • 2013-05-23
    • 1970-01-01
    • 2022-10-17
    • 2017-08-10
    相关资源
    最近更新 更多