Mongodb对嵌入式文档的本机验证

装备

我正在尝试提出Mongodb的本机验证规则,该规则将对文档(具有嵌入式文档)进行验证,以使该嵌入式文档完全不存在,或者如果存在则强制存在一个或多个字段。

我在下面有一个例子。JSON文档具有嵌入式文档useruser可能不存在,或者当它存在时,必须name强制存在一个字段

"validator" : {
        "$or" : [
            {
                "user" : {
                    "$exists" : "false",
                    "$type" : "null"
                }
            },
            {
                "user.name" : {
                    "$type" : "string",
                    "$exists" : "true"
                }
            }
            ]
}

当我尝试将一个空的JSON文档插入testschema像这样的集合时db.testschema.insert({}),出现以下标准错误,该标准错误不会告诉您错误和/或原因。这应该可行,因为我的文档可以包含user带字段的嵌入式文档也可以name根本不包含嵌入式文档。

WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 121,
        "errmsg" : "Document failed validation"
    }
})

验证器中使用的运算符看起来正确吗?

daemon24

第一件事nulltrue并且false不应该作为字符串false传递,因为字符串将true只求和。

解决方案无需“ $ type”:空验证器,仅“ $ exists”:false足以满足您的要求,以下验证将为您服务

"validator" : {
        "$or" : [
            {
                "user" : {
                    "$exists" : false,
                }
            },
            {
                "user.name" : {
                    "$type" : "string",
                    "$exists" : true
                }
            }
            ]
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章