我面临着将数据从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();
任何人都可以提供帮助。
答案 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
转换为MongoId
而subCategory._id
需要为整数的原因。在你的例子中应该没问题,但是PHP
在几次操作之后往往会以字符串值变量结束(特别是如果你通过另一个数据库获得它)。因此,在这种情况下,子文档查询部分可能需要额外调用intval()
。