public function run() { echo 'Massive Run for samples'; $biobanks = Biobank::model()->findAll(); foreach ($biobanks as $biobank) { $modifier = new EMongoModifier(); $modifier->addModifier('biobank_id', 'set', (string) $biobank->_id); $criteria = new EMongoCriteria(); $criteria->biobank_id = $biobank->id; $status = Sample::model()->updateAll($modifier, $criteria); $criteriaAfter = new EMongoCriteria(); $criteriaAfter->biobank_id = (string) $biobank->_id; $count = Sample::model()->count($criteriaAfter); echo "Done for biobank {$biobank->_id} - {$biobank->name} : {$count}\n"; } }
/** * Add a new set of modifiers to current modifiers. If modifiers has already been * added for specific field, they will be overwritten. * * @param EMongoModifier $modifier modifier to merge into current object * @return EMongoModifier */ public function mergeWith($modifier) { if (is_array($modifier)) { $modifier = new EMongoModifier($modifier); } else { if (empty($modifier)) { return $this; } } foreach ($modifier->getFields() as $fieldName => $rule) { $this->_fields[$fieldName] = $rule; } return $this; }
/** * Atomic, in-place update method. * * @since v1.3.6 * @param EMongoModifier $modifier updating rules to apply * @param EMongoCriteria $criteria condition to limit updating rules * @return bool */ public function updateAll($modifier, $criteria = null) { Yii::trace(get_class($this) . '.updateAll()', 'ext.MongoDb.EMongoDocument'); if ($modifier->canApply === true) { $this->applyScopes($criteria); if (version_compare(Mongo::VERSION, '1.0.5', '>=') === true) { $result = $this->getCollection()->update($criteria->getConditions(), $modifier->getModifiers(), array('fsync' => $this->getFsyncFlag(), 'safe' => $this->getSafeFlag(), 'upsert' => false, 'multiple' => true)); } else { $result = $this->getCollection()->update($criteria->getConditions(), $modifier->getModifiers(), array('upsert' => false, 'multiple' => true)); } return $result; } else { return false; } }