首页 > 解决方案 > Yii2中的MongoDB字符串字段值长度

问题描述

我刚刚阅读了如何在 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 中工作?

标签: mongodbyii2yii2-active-records

解决方案


我想没有办法直接查询数据库。相反,我在 php 中过滤了结果:

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

谢谢。


推荐阅读