You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel MongoDB如何查询array类型列中包含指定值的记录

你原来的写法失效的原因:where('types', '=', $num)是要求types字段完全等于传入的$num值,而你的types是二维嵌套数组,需要匹配的是嵌套层级内的元素,完全相等的条件不可能命中,所以查询无结果。

以下是两种常用存储场景下的正确写法:

场景1:数据库为MongoDB(配合jenssegers/laravel-mongodb扩展使用)

两种可直接运行的写法:

  1. 链式调用查询
$searchValue = '4';
$result = Employee::where('types', 'elemMatch', function ($q) use ($searchValue) {
    $q->where('$', 'elemMatch', $searchValue);
})->get();
  1. 原生查询语法
$searchValue = '4';
$result = Employee::whereRaw([
    'types' => [
        '$elemMatch' => [
            '$elemMatch' => [ '$eq' => $searchValue ]
        ]
    ]
])->get();

场景2:数据库为MySQL,types字段为JSON类型

使用MySQL内置的JSON_SEARCH函数实现:

$searchValue = '4';
$result = Employee::whereRaw(
    'JSON_SEARCH(types, "one", ?) IS NOT NULL',
    [$searchValue]
)->get();

两种写法都可以命中所有types二维数组中任意子数组包含搜索值的记录,和你预期的返回结果一致。

内容的提问来源于stack exchange,提问作者Sarah Manning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:30:02