我在使用 MongoDB 在 Zf2 和 Doctrine2 中实现一些在 Symfony2 和 Doctrine2 中相当简单的东西时遇到了问题。
我有一个发票文档,我想在其中确保 Invoice::pattern 和 Invoice::number 的组合是唯一的。一个数字可以出现多次,与图案相同,但图案和发票号的组合应该是唯一的。
在Symfony2中我会使用桥
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
@UniqueEntity({"pattern", "number"})
class Invoice
{
...
但由于显而易见的原因,这在 Zf2 中不起作用。
我当前在 Zend Framework 2 中的注释设置是
/**
* Class Invoice
* @package Common\Document\Billing
*
* @ODM\Document(
* collection="invoice"
* )
* @ODM\UniqueIndex(keys={"prefix"="asc", "number"="asc"})
* @ODM\ChangeTrackingPolicy("DEFERRED_IMPLICIT")
*/
class Invoice
{
...
但这实际上允许使用相同的模式和编号保存发票。
最佳答案
恐怕您是在比较苹果和梨。
@ODM\UniqueIndex 索引是 Doctrine MongoDB ODM 的一部分.它的目的是在运行控制台命令 odm:schema:create/odm:schema:update 时创建/更新索引。 MongoDB 使用这些索引来加速查找。
创建唯一索引时,MongoDB 将强制执行该唯一性。您可以将其视为一种数据库级别的验证。
因为这一切都是 Doctrine MongoDB ODM 和 MongoDB 本身的一部分,所以您可以在任何您想要的框架中使用它。 Symfony 2 或 Zend Framework 2 在这里没有区别。
@UniqueEntity 注释是 Symfony 2's Validator Component 的一部分.该组件可以单独使用,但大多数开发人员使用 Form Component ,它又使用 Validator 组件进行表单验证。其目的是验证用户输入。
换句话说:这种验证与 MongoDB 所做的完全不同。 Validator 组件在接收到用户输入时强制执行规则(因此在 数据发送到数据库之前),MongoDB 在尝试存储数据时强制执行数据完整性(因此在 数据之后)被发送到数据库)。
我认为您正在搜索 Zend Framework 2 中的 @UniqueEntity 注释的等效项。您需要查看 ZF2 Form ,或者至少是 ZF2 Validator .
您可能正在使用 ZF2 DoctrineModule ,或者至少是 ZF2 DoctrineMongoODMModule .看看 validator documentation of ZF2 DoctrineModule看看如何使用它。
关于mongodb - Doctrine2 MongoDB ODM 复合键(UniqueEntity),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26462079/
我有一个如下所示的User模型:classUser数据库中的users表有两个外键organization_id和department_id。如何使这两列成为复合主键?到目前为止,我在网上看到了两种方法:选项1使用composite_primary_keysgem选项2使用如下方式为两列中的每一列添加索引:add_index:users,[:organization_id,:department_id],unique:true我的问题在users表中唯一标识一行的最佳方法是什么,其中一行必须按顺序具有department_id和organization_id被唯一识别?索引两列和简单地
我可以在一个Rails应用程序中同时使用MongoDB和PostgreSQL吗?具体来说,我最终会想要使用像MongoHQ这样的东西。到目前为止,我未能在实验中进行这项工作。令我担心的是,MongoDB文档特别指出我必须禁用ActiveRecord。任何建议将不胜感激。 最佳答案 您无需禁用ActiveRecord即可使用MongoDB。查看Mongoid只需将gem加上任何模型与您现有的任何ActiveRecord模型一起添加。您应该注意到MongoHQ只是MongoDB的托管服务,可以与任何对象文档映射器(ODM)一起使用。更多
给定以下资源定义:map.resources:posts,:except=>[:show]map.post'/:year/:month/:slug,:controller=>:posts,:action=>:show我可以让url_for为我工作,使用这个语法:'2010',:month=>'02',:slug=>'test')%>但是有没有办法让它工作呢?目前它抛出这个错误:Noroutematches{:year=>#,:controller=>"posts",:action=>"show"}显然它将@post对象传递给第一个路由参数(看起来像一个Rails错误...)。但是我可以
我必须在mongoid模型中添加几个字段,我知道MongoDB没有迁移,但如果我继续而不删除数据库,使rails完全“重新生成”数据库,它不会显示或使用新的领域!去这里最好的方法是什么?有比删除/重新打开mongodb更软的东西吗?提前致谢卢卡 最佳答案 一般来说,应该可以在运行时用新字段更新旧文档。MongoDB中不需要迁移。您可能想编写rake任务以使用新字段和默认值更新旧文档。您可以通过检查那些默认值为nil的新字段来找到这些文档。更新简单风格:如果您使用默认值定义一个新字段,只要您设置了一个新值,就应该始终使用该值:应用程序
我如何从Ruby代码连接到mongodb? 最佳答案 首先,您必须安装MongoDbgem:geminstallmongo然后运行代码:require'rubygems'#notnecessaryforRuby1.9require'mongo'db=Mongo::Connection.new.db("mydb")#ORdb=Mongo::Connection.new("localhost").db("mydb")#ORdb=Mongo::Connection.new("localhost",27017).db("mydb")
我正在尝试使用聚合框架(使用ruby)并像这样投影日期:db['requests'].aggregate([{"$project"=>{_id:0,method:'$method',user:'$user',year:{'$year'=>'$timestamp'}}}])文档是这样的:{_id:ObjectId("5177d7d7df26358289da7dfd"),timestamp:ISODate("2013-04-12T03:58:05+00:00"),method:"POST",status:"200",inputsize:"874",outputsize:"4981",u
我试图通过在Ruby中进行的查询从MongoDB获取字段的子集,但它似乎不起作用。它不返回任何结果这是ruby代码:coll.find("title"=>'Halo',:fields=>["title","isrc"])#thisdoesn'twork如果我删除字段散列,它会工作,返回包含所有字段的结果coll.find("title"=>'Halo')#thisworks查看mongodb控制台,第一个查询在mongodb服务器上结束,如下所示:{title:"Halo",fields:["title","isrc"]}如果我尝试从mongo客户端控制台进行查询,它会工作,我会得到结
这个问题在这里已经有了答案:HowtosetcompositekeyinRailsapplication(2个答案)关闭8年前。我在没有Rails的ruby项目中使用ActiveRecord。我需要为表定义复合主键。通常迁移会自动创建主键。是否可以使用事件记录为表定义我自己的复合主键?
文章目录Elasticsearch和MongoDB对比关于ElasticsearchElasticsearch应用场景关于MongoDBMongoDB优点mongodb适用场景Elasticsearch和MongoDB对比Elasticsearch和MongoDB开源许可协议参考Elasticsearch和MongoDB对比关于Elasticsearch官网:https://www.elastic.co/cn/elasticsearch/Elasticistheleadingplatformforsearch-poweredsolutions.Weaccelerateresultsthatma
我正在为名为flot的Javascript图表库制作一个组件。//这是我目前拥有的少量代码。我遇到的问题是如何使该div标记在页面上随机生成,以便我可以输出多个图表。显然,在当前状态下它不会这样做。我需要将值传递到javascript函数中。我知道我可以创建另一个需要id的属性,用户必须指定id,但我注意到很多组件不需要id。在primefaces和icefaces等繁重的ajax/javascript库中,id似乎是随机的。 最佳答案 可以通过#{cc.id}获取复合组件自身的ID。因此,为了确保唯一性,只需执行以下操作:和$.p