在mongo中验证数据的最佳方法是什么?

Sim*_*ley 10 validation mongodb

验证插入或更新到MongoDB中的数据的最佳方法是什么?是编写某种服务器执行的Javascript代码进行验证吗?

Sal*_*ali 10

MongoDB 3.2开始,他们添加了文档验证(幻灯片).

您可以为每个集合指定验证规则,使用验证器使用几乎所有的Mongo的查询操作选项(除$geoNear,$near,$nearSphere,$text,和$where).

要使用验证器创建新集合,请使用:

db.createCollection("your_coll", {
  validator: { `your validation query` }
})
Run Code Online (Sandbox Code Playgroud)

要将验证器添加到现有集合,您可以添加验证器:

db.createCollection("your_coll", {
  validator: { `your validation query` }
})
Run Code Online (Sandbox Code Playgroud)

验证仅适用于插入/更新,因此当您在旧集合上创建验证器时,将不会验证先前的数据(您可以为以前的数据编写应用程序级别验证).您还可以指定validationLevelvalidationAction来说明如果文档未通过验证将会发生什么.

如果您尝试使用未通过验证的内容插入/更新文档(并且未指定任何奇怪的validationLevel/action),那么您将收到错误writeResult(遗憾的是,错误不会告诉您失败的原因并且您只能获得默认值validation failed):

WriteResult({
   "nInserted" : 0,
   "writeError" : {
      "code" : 121,
      "errmsg" : "Document failed validation"
   }
})
Run Code Online (Sandbox Code Playgroud)


The*_*heo 6

MongoDB没有约束或触发器,因此应用程序必须验证数据.

如果存在无效数据,您还可以编写每天检查一次或更多的Javascript脚本.您可以使用它来检查应用程序的业务逻辑的质量.


Mar*_*ing 1

我认为你的应用程序处理这种事情是很正常的。如果数据在某种程度上无效,请不要将其添加到数据存储中,直到用户更正您检测到的任何错误。