Mongodb 嵌入式文档的本机验证
Mongodb native validation for embedded documents
我正在尝试提出一个 Mongodb 的本机验证规则,该规则将验证文档(具有嵌入文档),以便嵌入文档根本不存在,或者如果存在,它有一个或多个字段必须存在。
我在下面有一个例子。 JSON 文档有一个嵌入文档 user
。这个 user
可能不存在,或者当它存在时它需要有一个字段 name
强制存在。
"validator" : {
"$or" : [
{
"user" : {
"$exists" : "false",
"$type" : "null"
}
},
{
"user.name" : {
"$type" : "string",
"$exists" : "true"
}
}
]
}
当我尝试将一个空的 JSON 文档插入到我的集合 testschema
中时,例如 db.testschema.insert({})
,我得到了下面的标准错误,它没有告诉我错在哪里 and/or 为什么。这应该是可能的,因为我的文档可以包含带有字段 name
的嵌入文档 user
,或者根本不包含嵌入文档。
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
验证器内部使用的运算符看起来正确吗?
首先,null
、true
和 false
不应作为字符串传递,作为字符串传递的 false
将仅评估为 true
。
解决方案 不需要 "$type" : null 验证器,只需 "$exists" : false 就足够了,下面的验证对你有用
"validator" : {
"$or" : [
{
"user" : {
"$exists" : false,
}
},
{
"user.name" : {
"$type" : "string",
"$exists" : true
}
}
]
}
我正在尝试提出一个 Mongodb 的本机验证规则,该规则将验证文档(具有嵌入文档),以便嵌入文档根本不存在,或者如果存在,它有一个或多个字段必须存在。
我在下面有一个例子。 JSON 文档有一个嵌入文档 user
。这个 user
可能不存在,或者当它存在时它需要有一个字段 name
强制存在。
"validator" : {
"$or" : [
{
"user" : {
"$exists" : "false",
"$type" : "null"
}
},
{
"user.name" : {
"$type" : "string",
"$exists" : "true"
}
}
]
}
当我尝试将一个空的 JSON 文档插入到我的集合 testschema
中时,例如 db.testschema.insert({})
,我得到了下面的标准错误,它没有告诉我错在哪里 and/or 为什么。这应该是可能的,因为我的文档可以包含带有字段 name
的嵌入文档 user
,或者根本不包含嵌入文档。
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
验证器内部使用的运算符看起来正确吗?
首先,null
、true
和 false
不应作为字符串传递,作为字符串传递的 false
将仅评估为 true
。
解决方案 不需要 "$type" : null 验证器,只需 "$exists" : false 就足够了,下面的验证对你有用
"validator" : {
"$or" : [
{
"user" : {
"$exists" : false,
}
},
{
"user.name" : {
"$type" : "string",
"$exists" : true
}
}
]
}