嵌入式文档的Mongodb本机验证

时间:2017-11-22 06:48:47

标签: mongodb validation database-schema

我试图想出一个Mongodb的原生验证规则,该规则将验证文档(具有嵌入式文档),使得嵌入的文档根本不存在(如果存在),它具有强制存在的一个或多个领域。

我在下面有一个例子。 JSON文档具有嵌入的文档user。此user可能不存在或存在时,需要强制显示字段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"
    }
})

验证器内部使用的运算符是否正确?

1 个答案:

答案 0 :(得分:1)

第一件事nulltruefalse不应作为字符串传递,false传递,因为字符串只会评估为true

解决方案无需" $ type" :null验证器,只是" $存在" :false足以满足您的需求,以下验证将对您有用

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