如何验证 mongodb 嵌入文档
how to validate mongodb embedded document
MongoDB 3.2 有这么好的 validation feature。但是,在此文档中,它仅向我展示了如何对第一级字段进行验证。如果我要插入以下嵌入文档,我该如何设置验证规则?
{"name": {
"first_name": "xx",
"last_name": "yy"
}
}
我尝试了以下方法,但它不起作用,
db.createCollection( "name_collection",
{ validator: { $and:
[
{name.first_name: {$type: "string"}},
{name.last_name: {$type: "string"}}
]
}
)
提前致谢。
下面是测试代码,效果不错
> db.createCollection('name', {validator: {$and: [{"name.first_name": {$type: 'string'}}, {"name.last_name": {$type: 'string'}}]}})
{ "ok" : 1 }
看来你应该将 ""
添加到 name.last_name
,
用有效数据测试
> db.name.insert({name: {first_name: 'xx', last_name: 'yy'}})
WriteResult({ "nInserted" : 1 })
用无效数据测试
> db.name.insert({name: {first_name: 'xx', last_name: 3}})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
> db.name.find()
{ "_id" : ObjectId("56e8b644f33ed6e7f3c57f90"), "name" : { "first_name" : "xx",
"last_name" : "yy" } }
你的代码片段中有几个错误。
您的 db.createCollection 没有匹配的分支。它应该看起来像
db.createCollection("name_collection", {
validator: { $and:[
{'name.first_name': {$type: "string"}},
{'name.last_name': {$type: "string"}}
]}
})
要验证验证是否有效,请尝试插入部分数据
db.name_collection.insert({name:{first_name:0, last_name:0}})
看到我只是将数值分配给 first_name 和 last_name,所以验证应该会失败。
执行上述查询后,出现以下错误。
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
但是如果我按照下面粘贴的方式指定文本,插入应该会成功。
db.name_collection.insert({name:{first_name:'f_name', last_name:'l_name'}})
结果:
WriteResult({ "nInserted" : 1 })
希望这就是您要找的。
MongoDB 3.2 有这么好的 validation feature。但是,在此文档中,它仅向我展示了如何对第一级字段进行验证。如果我要插入以下嵌入文档,我该如何设置验证规则?
{"name": {
"first_name": "xx",
"last_name": "yy"
}
}
我尝试了以下方法,但它不起作用,
db.createCollection( "name_collection",
{ validator: { $and:
[
{name.first_name: {$type: "string"}},
{name.last_name: {$type: "string"}}
]
}
)
提前致谢。
下面是测试代码,效果不错
> db.createCollection('name', {validator: {$and: [{"name.first_name": {$type: 'string'}}, {"name.last_name": {$type: 'string'}}]}})
{ "ok" : 1 }
看来你应该将 ""
添加到 name.last_name
,
用有效数据测试
> db.name.insert({name: {first_name: 'xx', last_name: 'yy'}})
WriteResult({ "nInserted" : 1 })
用无效数据测试
> db.name.insert({name: {first_name: 'xx', last_name: 3}})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
> db.name.find()
{ "_id" : ObjectId("56e8b644f33ed6e7f3c57f90"), "name" : { "first_name" : "xx",
"last_name" : "yy" } }
你的代码片段中有几个错误。
您的 db.createCollection 没有匹配的分支。它应该看起来像
db.createCollection("name_collection", {
validator: { $and:[
{'name.first_name': {$type: "string"}},
{'name.last_name': {$type: "string"}}
]}
})
要验证验证是否有效,请尝试插入部分数据
db.name_collection.insert({name:{first_name:0, last_name:0}})
看到我只是将数值分配给 first_name 和 last_name,所以验证应该会失败。
执行上述查询后,出现以下错误。
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
但是如果我按照下面粘贴的方式指定文本,插入应该会成功。
db.name_collection.insert({name:{first_name:'f_name', last_name:'l_name'}})
结果:
WriteResult({ "nInserted" : 1 })
希望这就是您要找的。