Browse Source

Translating SQL-like syntax into Mongo syntax removed from "\yii\mongodb\Collection".

tags/2.0.0-beta
Paul Klimov 11 years ago
parent
commit
5a046230fd
  1. 28
      extensions/mongodb/Collection.php

28
extensions/mongodb/Collection.php

@ -651,7 +651,7 @@ class Collection extends Object
} }
/** /**
* Converts user friendly condition keyword into actual Mongo condition keyword. * Converts "\yii\db\*" quick condition keyword into actual Mongo condition keyword.
* @param string $key raw condition key. * @param string $key raw condition key.
* @return string actual key. * @return string actual key.
*/ */
@ -659,25 +659,8 @@ class Collection extends Object
{ {
static $map = [ static $map = [
'OR' => '$or', 'OR' => '$or',
'>' => '$gt',
'>=' => '$gte',
'<' => '$lt',
'<=' => '$lte',
'!=' => '$ne',
'<>' => '$ne',
'IN' => '$in', 'IN' => '$in',
'NOT IN' => '$nin', 'NOT IN' => '$nin',
'ALL' => '$all',
'SIZE' => '$size',
'TYPE' => '$type',
'EXISTS' => '$exists',
'NOTEXISTS' => '$exists',
'ELEMMATCH' => '$elemMatch',
'MOD' => '$mod',
'%' => '$mod',
'=' => '$$eq',
'==' => '$$eq',
'WHERE' => '$where'
]; ];
$matchKey = strtoupper($key); $matchKey = strtoupper($key);
if (array_key_exists($matchKey, $map)) { if (array_key_exists($matchKey, $map)) {
@ -759,7 +742,6 @@ class Collection extends Object
{ {
$result = []; $result = [];
foreach ($condition as $name => $value) { foreach ($condition as $name => $value) {
$name = $this->normalizeConditionKeyword($name);
if (strncmp('$', $name, 1) === 0) { if (strncmp('$', $name, 1) === 0) {
// Native Mongo condition: // Native Mongo condition:
$result[$name] = $value; $result[$name] = $value;
@ -769,12 +751,8 @@ class Collection extends Object
// Quick IN condition: // Quick IN condition:
$result = array_merge($result, $this->buildInCondition('IN', [$name, $value])); $result = array_merge($result, $this->buildInCondition('IN', [$name, $value]));
} else { } else {
// Normalize possible verbose condition: // Mongo complex condition:
$actualValue = []; $result[$name] = $value;
foreach ($value as $k => $v) {
$actualValue[$this->normalizeConditionKeyword($k)] = $v;
}
$result[$name] = $actualValue;
} }
} else { } else {
// Direct match: // Direct match:

Loading…
Cancel
Save