2017-10-13 48 views
1

我对Grails或GORM并不熟悉(这是我们几乎没有碰过的传统项目)。GORM UpdateAll引用属性

我的问题:我需要更新匹配查询的所有对象,更新本质上需要引用该对象的另一个属性,并从一个属性复制到不同的属性。另一个挑战是搜索和更新必须以原子方式完成以避免问题。作为一个db,我们使用的是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。无论什么解决方案最适合。 在此先感谢

回答

0

最快的解决办法是使用“低级别”蒙戈查询:

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

你必须虽然检查,你有你的蒙戈插件的版本updateMany方法/蒙戈驱动程序。你可能最终有:

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

这并不完全是关键,但因为我只需要$重命名属性无论如何(不复制),它的工作。谢谢 – Kroney