Mongodb 在文档中自动创建值(如触发器?或自动增值?)

Mongodb 在文档中自动创建值(如触发器?或自动增值?),mongodb,Mongodb,我相信我在最新的一本书中读到了一些内容,您可以在创建文档时自动设置要在文档中创建的值,即服务器端。我敢肯定这与索引有关。。但是我找不到它 也就是说,如果插入了文档,MongoDB本身会主动创建价值 显而易见的解决方案是在应用程序端创建价值——但长话短说,在这个特定的实例中,这是绝对不可能的。我不会问这个问题,若我并没有一点头绪,我读过它可以在服务器端完成 我还回顾了自动增量值,但我的值必须始终为0,而且如果不完全替换_id值(?),我似乎无法执行此操作 另一种选择是在MongoDB之外使用一个服

我相信我在最新的一本书中读到了一些内容,您可以在创建文档时自动设置要在文档中创建的值,即服务器端。我敢肯定这与索引有关。。但是我找不到它

也就是说,如果插入了文档,MongoDB本身会主动创建价值

显而易见的解决方案是在应用程序端创建价值——但长话短说,在这个特定的实例中,这是绝对不可能的。我不会问这个问题,若我并没有一点头绪,我读过它可以在服务器端完成

我还回顾了自动增量值,但我的值必须始终为0,而且如果不完全替换_id值(?),我似乎无法执行此操作

另一种选择是在MongoDB之外使用一个服务器端脚本,当看到新文档时,该脚本会将其更新为具有值。但是想看看MongoDB是否有内置的东西


tl;dr MongoDB能否在创建文档时自动在文档中创建值?或者我想象过读这篇文章吗?

目前,mongo中没有触发器(但您可以在此处投票支持该功能->)。

默认值 与MongoDB 2.4一样,服务器端不支持在插入文档时为任意字段设置默认值,而不在插入/插入中指定这些字段值。这意味着某种模式验证或服务器端触发器,而这两者都不是目前MongoDB的特性(或者近期可能是IMHO)

如果插入的文档没有
\u id
字段(文档所需的主键),则客户端驱动程序将为此生成一个。如果应用程序或驱动程序不提供
\u id
,作为最后手段,MongoDB服务器将生成一个新的
ObjectID

$setOnInsert
操作员 如果您正在执行(如果文档存在,请更新,否则请插入一个新文档),那么您可能会看到一个新文档。使用此运算符,可以在upsert导致插入时为字段提供默认值。不过,这仍然是在应用程序端完成的

如果你下定决心要伪造它 既然您提到由于某种原因,无法修改应用程序代码,下面是一些可能的解决方法。需要明确的是,这些方法仍然需要编写应用程序代码,但要避免不更改原始应用程序代码的限制(这显然是最直接、最可靠的方法)

  • 编写一个脚本,查找集合中缺少必填字段的文档(使用),并使用所需的默认值更新这些文档。您可以将其作为计划作业运行(即在Linux上使用
    cron
    ),并根据需要默认字段存在的时间调整频率

  • 如果您需要以更“实时”的方式添加默认值,则可以使用。这将涉及将MongoDB部署配置为副本集(如果还没有),以便创建
    oplog
    。您必须编写自定义代码来跟踪oplog,并检查相关插入,以查看它们是否缺少默认字段(并根据需要进行更新)。这里有一个可能是一个有用的起点