使用mongodb-odm / handle删除引用的策略

时间:2015-12-07 21:16:18

标签: mongodb doctrine-odm

我们在项目中使用了doctrine / mongodb-odm,并且有一个模型引用了另一个模型:

@ReferenceMany(targetDocument="Extra", simple=true)

当我们检索引用的对象时,其中一个对象可能不再可用。 所以我们添加了sort属性以确保将执行db查询(忽略已删除的对象):

@ReferenceMany(targetDocument="Extra", simple=true, sort={"name"="asc"})

使用doctrine / mongodb-odm 1.0.3它不再可能,并且与Doctrine \ ODM \ MongoDB \ Mapping \ MappingException打破:

  

ReferenceMany的排序不能与addToSet和pushAll策略一起使用,示例中使用的pushAll :: extras

为什么我不能对这些策略使用“排序”?策略不仅对写请求有意义吗?

是否可以使用set策略来保持相同的应用程序逻辑?

@ReferenceMany(targetDocument="Extra", simple=true, strategy="set", sort={"name"="asc"})

唯一的区别是,当我添加另一个引用时,所有现有引用都将被完全重写?

1 个答案:

答案 0 :(得分:0)

  

为什么我不能使用"排序"有了这些策略吗?策略不仅对写请求有意义吗?

是的,策略主要用于编写集合,但在这种情况下,您的集合不是参考的反面,因此它跟踪自身的变化。像addToSetpushAll这样的策略稍后会进行位置更新,并且文档中的sort应用顺序可能会在数据库中有所不同,这样可能会在保存此类集合时导致数据丢失。

  

是否可以使用set策略来保持相同的应用程序逻辑?

是的,应用程序逻辑不会改变。此外,您可能希望使用setArray策略来确保将BSON数组保存到数据库,或者更好的是atomicSetArray以确保只触发一个查询来更新文档和引用。

  

唯一的区别是,当我添加另一个引用时,所有现有引用都将被完全重写?

一般来说,是的。