GORM UpdateAll 参考 属性
GORM UpdateAll reference property
我对 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。无论哪种解决方案最适合。
提前致谢
最快的解决方案是使用 "low-level" 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 ] )
我对 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。无论哪种解决方案最适合。 提前致谢
最快的解决方案是使用 "low-level" 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 ] )