【问题标题】:Strategies with mongodb-odm / handle deleted references使用 mongodb-odm / 处理已删除引用的策略
【发布时间】:2016-03-12 15:13:40
【问题描述】:

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

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

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

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

在学说/mongodb-odm 1.0.3 中,它不再可能,并且与 Doctrine\ODM\MongoDB\Mapping\MappingException 中断:

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

为什么我不能在这些策略中使用“排序”?策略不仅对写入请求感兴趣吗?

是否可以使用集合策略来保持相同的应用逻辑?

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

唯一的区别是,当我添加进一步的引用时,所有现有的引用都会完全重写吗?

【问题讨论】:

    标签: mongodb doctrine-odm


    【解决方案1】:

    为什么我不能在这些策略中使用“排序”?策略不仅对写入请求感兴趣吗?

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

    是否可以使用集合策略来保持相同的应用逻辑?

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

    唯一的区别是,当我添加进一步的引用时,所有现有的引用都会完全重写吗?

    一般来说,是的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 2016-04-22
      • 2018-10-22
      相关资源
      最近更新 更多