Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用mongodb验证程序验证对象数组?_Mongodb_Mongodb Query - Fatal编程技术网

如何使用mongodb验证程序验证对象数组?

如何使用mongodb验证程序验证对象数组?,mongodb,mongodb-query,Mongodb,Mongodb Query,我一直在尝试使用MongoDB提供的验证器验证我的数据,但遇到了一个问题。下面是我插入的一个简单的用户文档 { "name" : "foo", "surname" : "bar", "books" : [ { "name" : "ABC", "no" : 19 }, { "name" : "DEF", "no" : 64 }, {

我一直在尝试使用MongoDB提供的验证器验证我的数据,但遇到了一个问题。下面是我插入的一个简单的用户文档

{
    "name"    : "foo",
    "surname" : "bar",
    "books"   : [
      {
        "name" : "ABC",
        "no"   : 19
      },
      {
        "name" : "DEF",
        "no"   : 64
      },
      {
        "name" : "GHI",
        "no" : 245
      }
    ]
}
现在,这是已应用于用户集合的验证器。但是这现在对books数组有效,我将随文档一起插入它。我想检查对象内部的元素,它们是books数组的成员。对象的架构不会更改

db.runCommand({
  collMod: "users",
  validator: {
    $or : [
      { "name"       : { $type : "string" }},
      { "surname"    : { $type : "string" }},
      { "books.name" : { $type : "string" }},
      { "books.no"   : { $type : "number" }}
    ],
  validationLevel: "strict"
});

我知道这个验证器是针对成员对象的,而不是针对数组的,但是我如何验证这样一个对象呢?

您可以在3.6中使用expression进行验证

JsonSchema允许定义和指定所有元素的模式约束以及单个数组元素的特定约束


有许多例子可以帮助您理解语法。

很久没有人问过这个问题了。
不管怎样,如果有人经历了这一切

对于MongoDB 3.6及更高版本,可以使用验证器实现这一点


db.createCollection(“用户”{
验证器:{
$jsonSchema:{
bsonType:“对象”,
必填项:[“姓名”、“姓氏”、“书籍”],
特性:{
姓名:{
bsonType:“字符串”,
描述:“必须是字符串且为必填项”
},    
姓:{
bsonType:“字符串”,
描述:“必须是字符串且为必填项”
},         
书籍:{
B类型:[“数组”],
项目:{
bsonType:“对象”,
必填项:[“名称”、“编号”],
特性:{
姓名:{
bsonType:“字符串”,
描述:“必须是字符串且为必填项”
},
否:{
b类型:“编号”,
描述:“必须是一个数字,并且是必需的”
}
}
},
描述:“必须是包含名称和编号的对象数组”
}
}
}
}
})
这个可以满足您的所有需求。

有关更多信息,请参阅此链接

我认为此链接将为您提供解决方案->嘿@RiyaSaxena。。。不,这不适用于mongodb。。无论如何,谢谢。您是否知道如何验证
数组
类型?这是无法完成的。不是现在,也许在未来的版本中,他们会给我们这个选项。有趣的是,我想发布这个答案,而你在同一个小时就已经发布了——尽管这个问题发布已经两年多了:)答案非常清楚,谢谢:)