Длина значения строкового поля MongoDB в Yii2 - PullRequest
0 голосов
/ 30 августа 2018

Я только что прочитал Как запросить длину значения строкового поля в MongoDB и успешно получил запрос, работающий при использовании непосредственно в консоли MongoDB. Запрос, который я использовал, был:

db.getCollection('language').find({
  name: {$ne: ''}, 
  $where: "this.i18n.length < 3"
})

Я сейчас пытаюсь повторить то же самое в Yii2:

$languages = Language::find()
  ->where(['$ne', 'name', ''])
  ->andWhere(['<', 'this.i18n.length', '3'])
  ->all();

но массив пуст.

Я пробовал запрос без длины строки:

$languages = Language::find()
  ->where(['$ne', 'name', ''])
  ->all();

и массив заполнен.

Я также пробовал запрос только с длиной строки:

$languages1 = Language::find()
  ->where(['<', 'this.i18n.length', '3'])
  ->all();
$languages2 = Language::find()
  ->where(['<', 'i18n.length', '3'])
  ->all();

но массив остается пустым.

Вопрос: как мне заставить $where: "this.i18n.length < 3" работать в Yii2?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Я думаю, что нет возможности напрямую запросить базу данных. Вместо этого я отфильтровал результаты в php:

$languages = Language::find()->where(['$ne', 'name', ''])->all();
foreach ($languages as $fac) {
  if(strlen($fac->i18n)<3){
    // my code here
  }
}

Спасибо.

0 голосов
/ 30 августа 2018

Не могу проверить прямо сейчас, но попробуйте что-то вроде этого:

$languages = Language::find()
  ->where(['$ne', 'name', ''])
  ->andWhere(['=', '$where','this.i18n.length<3'])
  ->all();
...