我想知道如何才允许现有或新对象中的某些新字段,但没有义务始终拥有所有这些字段。
例如,我想验证产品对象 我允许字段,如名称,大小,价格,高度,宽度,没有其他未列出的字段,但同时对象是有效的,只有一些字段。
".validate": "newData.hasChildren(['name', 'size','price', 'height', 'width',])"
我认为所有领域都是有义务的。因此,没有高度或宽度的新产品将无效。但我希望它们仍然有效,但不允许有人发明根本没有列出的新字段。
这也需要与现有产品和新产品一起使用。 提前感谢您的提示。
答案 0 :(得分:1)
要仅允许所需的字段,请使用wildcard location(以$开头的规则)。这将匹配您已指定不的任何路径。
来自docs ...
动态$变量也可以与常量并行使用 路径名称。在这个例子中,我们使用$ 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')"