2014-09-01 54 views
1

如果我们使用复合分片密钥,则{a,b}有可能在任何查询中抛出错误,这些查询在java驱动程序级别的查询中不包含这些字段。即查询执行前的任何回调/生命周期事件...就像AbstractMongoEventListener - 在这里我们有onAfterLoad和onAfterConvert的选项,但我们的要求是在执行查询之前...在java驱动程序级别的东西MongoDB分片密钥 - 在每个查询中强制执行

回答

0

我明白你为什么想要这个功能(如果查询不包括作为其条件一部分的单个分片密钥,那么它将导致“分散和收集”类型的查询,这导致显着的性能下降)。但是API的最佳实践表明,API应该设计用于单一目的,并且是通用的,如果我们倾向于将此功能添加到Java驱动程序,那么它将趋向于施加可能不需要的额外约束。因此,没有开箱即用的API,为您做到这一点。

What you can do to make it work - Write a wrapper on top of this API with the additional capability. 
+0

感谢@vmr快速响应。正是我们需要执行的原因:)将研究包装的可能性并得到返回 – 2014-09-01 12:48:10

+1

对于寻找类似的东西的人是我做的 - 1)创建一个扩展MongoTemplate的自定义MongoTemplate类 2)覆盖'find(Query查询,类 entityClass,String collectionName)'和'findOne(Query query,Class entityClass,String collectionName)',并做任何验证/操作 3)在配置扩展AbstractMongoConfiguration覆盖'mongotemplate'方法并返回您创建的自定义Mongotemplate – 2014-09-02 08:25:23