Laravel+MongoDB:如何根据数组对象键查询数据?
解决MongoDB数组字段匹配无结果的问题
问题根源分析
查询无结果大概率是以下两个原因之一:
- 类型不匹配:数据库中
id_competitor是字符串类型的"19",但你的$match_to变量可能是数字类型的19——MongoDB是强类型数据库,字符串和数字无法匹配。 - Laravel MongoDB查询语法错误:当前使用的
orWhere参数顺序/写法不符合Laravel MongoDB扩展的要求。
解决方案
1. 确保类型一致
先把$match_to强制转为字符串,和数据库字段类型对齐:
$match_to = (string)$match_to;
2. 修正查询语句
针对数组元素的单个字段匹配,不需要用$elemMatch,直接用点语法更简单可靠;如果必须用orWhere,写法如下:
// 方法一:直接用点语法匹配数组元素的字段(推荐,适合单字段匹配) $get_product->orWhere('matching_competitors.id_competitor', $match_to); // 方法二:如果需要多字段匹配数组元素,用闭包包裹whereElemMatch $get_product->orWhere(function ($query) use ($match_to) { $query->whereElemMatch('matching_competitors', [ 'id_competitor' => $match_to ]); });
3. 排查其他条件冲突
如果以上操作后仍无结果,检查代码中“其他条件”是否和当前orWhere逻辑冲突。比如前面的where条件和orWhere是或运算,确认目标数据是否满足其中任意一个条件。
内容的提问来源于stack exchange,提问作者Shibbir
相关产品推荐
相关产品推荐

