首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何验证mongodb嵌入式文档

如何验证mongodb嵌入式文档
EN

Stack Overflow用户
提问于 2016-03-16 00:54:03
回答 2查看 3.1K关注 0票数 3

MongoDB 3.2有一个很好的验证特性。然而,在这个文档中,它只向我展示了如何在第一级字段上进行验证。如果要插入以下嵌入文档,如何设置验证规则?

代码语言:javascript
运行
复制
{"name": {
          "first_name": "xx",
          "last_name": "yy"
         }
}

我试过以下几种方法,但不起作用,

代码语言:javascript
运行
复制
db.createCollection( "name_collection",
    { validator: { $and:
        [
            {name.first_name: {$type: "string"}},
            {name.last_name: {$type: "string"}}
        ]
    }
)

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-16 01:29:14

这是测试代码,运行良好。

代码语言:javascript
运行
复制
> db.createCollection('name', {validator: {$and: [{"name.first_name": {$type: 'string'}}, {"name.last_name": {$type: 'string'}}]}})
{ "ok" : 1 }

似乎你应该把""添加到name.last_name中,

用有效数据测试它

代码语言:javascript
运行
复制
> db.name.insert({name: {first_name: 'xx', last_name: 'yy'}})
WriteResult({ "nInserted" : 1 })

用无效的数据测试它

代码语言:javascript
运行
复制
> 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" } }
票数 3
EN

Stack Overflow用户

发布于 2016-03-16 01:53:53

嗯,您的代码片段中有几个错误。

您的db.createCollection没有匹配的接口。它应该看起来像

代码语言:javascript
运行
复制
db.createCollection("name_collection", {
  validator: { $and:[
    {'name.first_name': {$type: "string"}},
    {'name.last_name': {$type: "string"}}
  ]}
})

若要验证验证是否有效,请尝试插入部分数据。

代码语言:javascript
运行
复制
 db.name_collection.insert({name:{first_name:0, last_name:0}})

请看,我只是将数值分配给first_name和last_name,这样验证就会失败。

执行上述查询后,会出现以下错误。

代码语言:javascript
运行
复制
WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 121,
        "errmsg" : "Document failed validation"
    }
})

但是,如果我指定的文本粘贴如下,插入应该成功,这样做。

代码语言:javascript
运行
复制
db.name_collection.insert({name:{first_name:'f_name', last_name:'l_name'}})

结果:

代码语言:javascript
运行
复制
WriteResult({ "nInserted" : 1 })

希望这就是你在看的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36024964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档