我想知道如何只允许在现有对象或新对象中使用某些新字段,而无须始终拥有所有这些字段的义务。
例如,我想验证一个产品对象,我允许使用诸如名称,尺寸,价格,高度,宽度之类的字段,而没有其他未列出的字段,但同时对象是有效的,而其中仅包含其中一些字段。
".validate": "newData.hasChildren(['name', 'size','price', 'height', 'width',])"
我认为所有领域都是义务性的。因此,没有高度或宽度的新产品将无效。但是我希望它们仍然有效,但不允许有人发明根本没有列出的新字段。
这也需要与现有产品和新产品一起使用。预先感谢您的提示。
要只允许您想要的字段,请使用通配符位置(以$开头的规则)。这将匹配您有任何路径不是已经指定。
从文档中...
动态$变量也可以与恒定路径名并行使用。在此示例中,我们使用$ other变量声明一个.validate规则,该规则可确保小部件除了标题和颜色之外没有其他子级。任何会导致创建其他子代的写操作都会失败。
{ "rules": { "widget": { // a widget can have a title or color attribute "title": { ".validate": true }, "color": { ".validate": true }, // but no other child paths are allowed // in this case, $other means any key excluding "title" and "color" "$other": { ".validate": false } } } }
至于删除所有匹配规则的义务,您可以在上面的示例中这样做。您也许还可以将OR用作验证规则的一部分:
".validate": "newData.hasChild('name') || newData.hasChild('size') || newData.hasChild('price')"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句