MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Не могат да се получат стойности на свойствата на dirtyPropertyNames за полета за асоцииране в grails

В момента GORM за MongoDB не дава правилни стойности в dirtyPropertyNames поле. Така че трябва да използвате друго инжектирано поле от по-ниско ниво в екземпляра на домейна, т.е. $changedProperties .

Но също така има проблем с $changedProperties че дори ако обвържете поле със същата стойност, $changedProperties ще има запис за него. Така че можете да го промените малко повече по този начин, за да направите кода си работещ:

def beforeUpdate() {
    def instance = this
    Map updatedFields = instance.$changedProperties

    updatedFields.each { name, value ->
        if (updatedFields[name] != instance[name]) {
            println "Field value $name is updated"
            if (name == "addresses") {
                // I've not run this for a long time, just confirm the old and new addresses values and swap the assignment of below lines
                List newAddresses = updatedFields[name]
                List oldAddresses = instance[name]

                newAddresses.each { address ->
                    if (!address.id) {
                        println "Got new address: $address.status"
                    } else {
                        Address oldAddress = oldAddresses.find { it.id == address.id }
                        if (!oldAddress) { // This is just an edge condition
                            println "Got new address: $address.status"
                        } else if (oldAddress.status != address.staus) {
                            println "$address status is updated to $address.status"
                        }
                    }
                }
            }
        }
    }
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB 4.0 JRException:Опцията 'cursor' е задължителна, с изключение на aggregate с аргумента обяснение

  2. MongoDB :намерете стойност в масив с множество критерии

  3. как да импортирам данни в mongoimport в разгърнато приложение за метеор?

  4. Премахване на една-една и една-много препратки - Mongoose

  5. MongoDB:Получаване на клиентски курсор::yield не може да отключи b/c предупреждение за рекурсивно заключване, когато използвате findAndModify в два процеса