【问题标题】:GORM UpdateAll reference propertyGORM UpdateAll 引用属性
【发布时间】:2017-10-13 10:11:58
【问题描述】:

我对 Grails 或 GORM 不太熟悉(这是我们几乎从未接触过的遗留项目)。

我的问题:我需要更新与查询匹配的所有对象,并且更新本质上需要引用对象的另一个属性并从一个属性复制到另一个属性。另一个挑战是必须以原子方式进行搜索和更新以避免出现问题。作为一个数据库,我们使用的是 mongodb(如果这改变了任何东西)。

//Example: account has three properties: A, B and C
DetachedCriteria<Account> query = Account.where {
  A: "something"
}
query.updateAll(
   B: C //how to reference C here?
)

如何在 updateAll 中引用 C?如果这甚至可能? 我也没有锁定使用 DetachedCriteria。无论哪种解决方案最适合。 提前致谢

【问题讨论】:

    标签: mongodb grails grails-orm


    【解决方案1】:

    最快的解决方案是使用“低级”mongo 查询:

    Account.collection.updateMany( [ A:'something' ], [ $set:[ A:'something else', B:42 ] ] )
    

    您必须检查您的 mongo 插件/mongo 驱动程序版本中是否有 updateMany 方法。你最终可能会:

    Account.collection.update( [ A:'something' ], [ $set:[ A:'something else', B:42 ] ], [ multi:1 ] )
    

    【讨论】:

    • 这并不完全正确,但因为无论如何我只需要 $rename 属性(而不是复制),它就起作用了。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多