YII2 -MongoDB查询用于过滤嵌套数组数据

时间:2015-08-29 08:33:52

标签: mongodb yii2

我面临着将数据从monogo db嵌入式集合过滤到YII2框架工作的问题。如果有人知道请帮忙。 我有类似的集合,如下所示。

{
    "_id" : ObjectId("55cb2133b35be8b7de137462"),
    "category" : "Technology",
    "subCategory" : [
        {
            "_id" : 1,
            "sub_category_name" : "test1"

        },
        {
            "_id" : 2,
            "sub_category_name" : "test2"

        },
        {
            "_id" : 3,
            "sub_category_name" : "test3"

        },
        {
            "_id" : 4,
            "sub_category_name" : "test4"
        }
    ]
}

因为我想根据在sub_Category上应用搜索条件来获取数据。

预期结果:我希望获得子类别中的ID 1和2的值。

我尝试过以下方法,但得到了所有子类别。

输入:$ id = [1,2];

 $query = new Query;
 $rows = $query->select([])
        ->from('category')
        ->where(array('_id' => '55c9caef8fae76a4a9d96c5a','subCategory._id' =>  $id));
  $rows = $query->all();

任何人都可以提供帮助。

1 个答案:

答案 0 :(得分:0)

如果您想要选择所有内容,则无需实际调用select。至于其余部分,我想我注意到了2个问题。

首先我不认为Yii2会进行自动MongoId转换,所以你会看到你是否真的只用_id选项将文档整回来(我不认为将)。其次,子文档字段的名称似乎是错误的。

以下是我认为可以进一步帮助您的内容:

$query = (new Query)->from('category')
   ->where(array(
     '_id' => new \MongoId('55c9caef8fae76a4a9d96c5a'),
     'subCategory._id' => [1, 2]
));
$rows = $query->all();

MongoDB仅在类型匹配时才匹配。 这就是您可能需要将主_id转换为MongoIdsubCategory._id需要为整数的原因。在你的例子中应该没问题,但是PHP在几次操作之后往往会以字符串值变量结束(特别是如果你通过另一个数据库获得它)。因此,在这种情况下,子文档查询部分可能需要额外调用intval()

相关问题