2017-10-13 5 views
1

Je ne suis pas très familier avec Grails ou GORM (c'est un projet hérité que nous n'avons presque jamais touché). Mon problème: J'ai besoin de mettre à jour tous les objets correspondant à une requête et la mise à jour doit essentiellement faire référence à une autre propriété de l'objet et copier d'une propriété à une propriété différente. Un autre défi est la recherche et la mise à jour doit être effectuée de manière atomique pour éviter les problèmes. En tant que db, nous utilisons mongodb (si cela change quelque chose).GORM UpdateAll propriété de référence

//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? 
) 

Comment puis-je faire référence à C dans updateAll? Si c'est même possible? Je ne suis pas bloqué sur l'utilisation de DetachedCriteria non plus. Quelle que soit la solution qui convient le mieux. Merci à l'avance

Répondre

0

La solution la plus rapide serait d'utiliser la requête mongo « bas niveau »:

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

Vous devez vérifier si, que vous avez méthode updateMany dans votre version de plugin mongo/mongo chauffeur. Vous pourriez finir par avoir:

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

Ce n'était pas totalement sur le point, mais puisque je devais seulement $ renommer la propriété de toute façon (pas de copie), cela a fonctionné. Merci – Kroney