【问题标题】:MongoDB string field value length in Yii2Yii2中的MongoDB字符串字段值长度
【发布时间】:2019-02-05 05:39:45
【问题描述】:

我刚刚阅读了How to query the string field value length in 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 &lt; 3" 在 Yii2 中工作?

【问题讨论】:

    标签: mongodb yii2 yii2-active-records


    【解决方案1】:

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

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

    谢谢。

    【讨论】:

      【解决方案2】:

      目前无法测试,但请尝试以下方法:

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

      【讨论】:

        猜你喜欢
        • 2015-06-17
        • 2019-08-30
        • 2014-07-22
        • 2017-05-16
        • 1970-01-01
        • 2013-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多