0

如何为“一对多”关系创建搜索表单/标准:假设“选择人群 > 10.000 的所有团队”。

我正在使用 MongoRecord 扩展(http://www.yiiframework.com/extension/mongorecord/)作为 MongoDb 的基本活动记录。

我基于来自 mongo db 的集合创建了一个带有 Yii 的 GridView(它适用于我)。我的一个文档的集合具有这样的结构:

{
_id":1,
"teamId":2453,
"teamName":"Team A",
"competition":["Competition A","Competition B"],
"matches":
    [
        {
            "_id":147852,
            "crowd":10234,
            "yellowCards":2,
            "scorers" [{....}]
            ....
        }
    ]
...
}

我的文件:

$teams = MongoTeam::model()->findAll();    

My dataProvider is:
$dataProvider=new CArrayDataProvider($teams, array(
        'id'=>'_id',
        'sort'=>array(
            'attributes'=>array(
                 '_id', 'teamId', 'teamName', 'matches', ...
            ),
        ),
        'pagination'=>array(
            'pageSize'=>20,
        ),
    ));
    $this->render('index', array('dataProvider'=>$dataProvider));

在视图中我有这样的东西:

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        array(
            'name' => 'Team ID',          
            'type' => 'raw',
            'value' => 'CHtml::encode($data->teamID)'
        ),
        array(
            'name' => 'Team Name',          
            'type' => 'raw',
            'value' => 'CHtml::encode($data->teamName)'
        ),
        ...

但是我无法使用子文档的标准创建过滤器(我的情况:“匹配”)。我不想使用任何其他 mongoDB 扩展/模块等。感谢和抱歉我的英语不好。

4

1 回答 1

0
$query=array(
   'matches.crowd'=>array('$gt'=>10000),
   'matches.$'=>1
);
$teams = MongoTeam::model()->findAll($query);

你可以这样使用。但是你不能使用这样的数据提供者。因为它会在 $teams 变量中生成太多行。您必须使用数据提供者的标准。我正在使用YiiMongoDbSuite执行此操作,它具有 EMongoCriteria 和 EMongoDataProvider 类来完成此操作。

于 2013-04-10T22:37:05.090 回答